2016-04-08 10 views
0

Lassen Sie mich einfach sagen, dass ich ziemlich neu in Android NDK bin und so, ich habe versucht, durch Androids Dokumentation darüber zu gehen. Ich habe einige Probleme mit diesem Problem bei Maven (über Plugins). Meine Maven Plugins Snippets sind unten sowie meine Android.mk Datei.Android NDK Make File und Maven Build Issues

pom.xml (Plugins Teil):

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-compiler-plugin</artifactId> 
    <configuration> 
     <compilerArgument>-AguiceAnnotationDatabasePackageName=my.package.name</compilerArgument> 
     <fork>true</fork> 
    </configuration> 
</plugin> 
<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>native-maven-plugin</artifactId> 
    <version>1.0-alpha-8</version> 
    <executions> 
     <execution> 
      <goals> 
       <goal>javah</goal> 
      </goals> 
      <phase>compile</phase> 
      <configuration> 
       <javahClassNames> 
        <javahClassName>my.package.name.MyClass</javahClassName> 
       </javahClassNames> 
       <javahVerbose>true</javahVerbose> 
       <javahPath>$(THE_JAVA_PATH)\bin\javah.exe</javahPath> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 
<plugin> 
    <groupId>com.simpligility.maven.plugins</groupId> 
    <artifactId>android-maven-plugin</artifactId> 
    <extensions>true</extensions> 
    <configuration> 
     <manifest> 
      <debuggable>true</debuggable> 
      <usesSdk> 
       <minSdkVersion>17</minSdkVersion> 
       <targetSdkVersion>18</targetSdkVersion> 
      </usesSdk> 
     </manifest> 
     <apk> 
      <debug>true</debug> 
     </apk> 
     <extractDuplicates>true</extractDuplicates> 
     <dex> 
      <coreLibrary>true</coreLibrary> 
      <jvmArguments> 
       <jvmArgument>-Xmx2048m</jvmArgument> 
      </jvmArguments> 
     </dex> 
     <nativeLibrariesDirectory>${to.ndk.libs}</nativeLibrariesDirectory> 
     <ndkOutputDirectory>${to.ndk.objs}/local</ndkOutputDirectory> 
    </configuration> 
</plugin> 
<plugin> 
    <groupId>com.simpligility.maven.plugins</groupId> 
    <artifactId>android-ndk-maven-plugin</artifactId> 
    <version>1.0.1-SNAPSHOT</version> 
    <executions> 
     <execution> 
      <goals> 
       <goal>ndk-build</goal> 
      </goals> 
      <configuration> 
       <target>${project.artifactId}</target> 
       <finalLibraryName>${project.artifactId}</finalLibraryName> 
       <ndkPath>$(THE_NDK_PATH)</ndkPath> 
       <makefile>jni/Android.mk</makefile> 
       <applicationMakefile>jni/Application.mk</applicationMakefile> 
       <architectures>${arch}</architectures> 
       <additionalCommandline>${ndk.args}</additionalCommandline> 
       <librariesOutputDirectory>${to.ndk.libs}</librariesOutputDirectory> 
       <objectsOutputDirectory>${to.ndk.objs}</objectsOutputDirectory> 
       <headerFilesDirectives> 
        <headerFilesDirective> 
         <directory>${basedir}/jni</directory> 
         <includes> 
          <include>**\/*.h</include> 
         </includes> 
        </headerFilesDirective> 
        <headerFilesDirective> 
         <directory>${project.build.directory}/native/javah</directory> 
         <includes> 
          <include>**\/*.h</include> 
         </includes> 
        </headerFilesDirective> 
       </headerFilesDirectives> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 

Meine Verzeichnisstruktur ist wie folgt myRoot -> jni -> (c/CPP-Dateien). Und natürlich die Standardverzeichnisstruktur für Java-Dateien. Meine Android.mk Datei ist folgende:

LOCAL_PATH := $(call my-dir) 

include $(CLEAR_VARS) 

LOCAL_MODULE := my-lib 

LOCAL_SRC_FILES := MyClass1.cpp \ 
    MyFile1.c \ 
    MyClass2.cpp 

LOCAL_C_INCLUDES := $(LOCAL_PATH) \ 
    $(LOCAL_PATH)/../target/native/javah 

LOCAL_LDLIBS := -llog 
LOCAL_CPP_FEATURES := rtti exceptions 

LOCAL_CFLAGS += \ 
    -D _NX_FEATURE_ATOMIC_C_PLUS_PLUS_11_ \ 
    -D _NX_FEATURE_CAN_BUS_INTERFACE_ROUTER_ \ 
    -D _NX_FEATURE_CAN_BUS_CREATED_BY_CONFIGURATION_ \ 
    -D _NX_FEATURE_CAN_BUS_TC_SERVICE_ \ 
    -D _NX_FEATURE_CRC_ \ 
    -D _NX_FEATURE_EXCEPTIONS_ \ 
    -D _NX_FEATURE_FILE_SUPPORT_CRT_ \ 
    -D _NX_FEATURE_FLOAT_64_ \ 
    -D _NX_FEATURE_LOG_ \ 
    -D _NX_FEATURE_MUTEX_PTHREAD_ \ 
    -D _NX_FEATURE_POSIX_SIGNAL_HANDLER_ \ 
    -D _NX_FEATURE_RANDOM_ \ 
    -D _NX_FEATURE_SECURITY_UNSET_INTENTIONALLY_ \ 
    -D _NX_FEATURE_THREAD_ \ 
    -D _NX_FEATURE_TRACE_STDIO_ \ 
    -D _NX_FEATURE_TCP_IP_ \ 
    -D _NX_FEATURE_XML_PARSER_ \ 
    -D NX_CUSTOMER_FAR \ 
    -D __STDC_FORMAT_MACROS 
    -D HAVE_FTRUNCATE=1 \ 
    -D HAVE_GETCWD=1 \ 
    -D HAVE_GETPAGESIZE=1 \ 
    -D HAVE_GETTIMEOFDAY=1 \ 
    -D HAVE_INTTYPES_H=1 \ 
    -D HAVE_MALLOC=1 \ 
    -D HAVE_MEMCHR=1 \ 
    -D HAVE_MEMMOVE=1 \ 
    -D HAVE_MEMORY_H=1 \ 
    -D HAVE_MEMSET=1 \ 
    -D HAVE_MKDIR=1 \ 
    -D HAVE_MMAP=1 \ 
    -D HAVE_MUNMAP=1 \ 
    -D HAVE_NETDB_H=1 \ 
    -D HAVE_PTRDIFF_T=1 \ 
    -D HAVE_RMDIR=1 \ 
    -D HAVE_SELECT=1 \ 
    -D HAVE_SOCKET=1 \ 
    -D HAVE_STDDEF_H=1 \ 
    -D HAVE_STDINT_H=1 \ 
    -D HAVE_STDLIB_H=1 \ 
    -D HAVE_STRINGS_H=1 \ 
    -D HAVE_STRING_H=1 \ 
    -D HAVE_STRPBRK=1 \ 
    -D HAVE_STRRCHR=1 \ 
    -D HAVE_STRSPN=1 \ 
    -D HAVE_STRTOUL=1 \ 
    -D HAVE_STRTOULL=1 \ 
    -D HAVE_SYS_PARAM_H=1 \ 
    -D HAVE_SYS_SOCKET_H=1 \ 
    -D HAVE_SYS_STAT_H=1 \ 
    -D HAVE_SYS_TIME_H=1 \ 
    -D HAVE_SYS_TYPES_H=1 \ 
    -D HAVE_TERMIOS_H=1 \ 
    -D HAVE_UNISTD_H=1 

LOCAL_STATIC_LIBRARIES := $(ANDROID_MAVEN_PLUGIN_LOCAL_STATIC_LIBRARIES)  
LOCAL_SHARED_LIBRARIES := $(ANDROID_MAVEN_PLUGIN_LOCAL_SHARED_LIBRARIES) 

include $(BUILD_SHARED_LIBRARY) 

# Important: Must be the last import in order for Android Maven Plugins paths to work 
include $(ANDROID_MAVEN_PLUGIN_MAKEFILE) 

So ist der Fehler Ich erhalte ist die folgende:

...\android-ndk-r10e\ndk-build.cmd -C ...\MyRoot APP_BUILD_SCRIPT=jni/Android.mk NDK_APPLICATION_MK=jni/Application.mk NDK_TOOLCHAIN=x86_64-4.9 APP_ABI=x86_64 V=1 -B NDK_DEBUG=1 NDK_LIBS_OUT=...\MyRoot\target\ndk-libs NDK_OUT=...\MyRoot\target\ndk-obj MyRoot 

make.exe: *** No rule to make target `MyRoot'. Stop. 

Ich bin mir nicht sicher, warum myRoot auch verwendet wird. Und wenn ich den Befehl manuell ohne 'MyRoot' mache, startet der Build-Prozess, aber es scheint keine meiner Include-Dateien zu verwenden, die in meiner Android.mk-Datei (LOCAL_C_INCLUDES) aufgeführt sind.

Es ist wahrscheinlich etwas albern, aber ich bin hier verloren. Jede Hilfe wird geschätzt.

Antwort

0

Am Ende Ihres Befehls haben Sie eine schwimmende 'MyRoot'. Ich bin ziemlich sicher, dass das Entfernen diesen Fehler beheben wird.

...\android-ndk-r10e\ndk-build.cmd -C ...\MyRoot \ 
APP_BUILD_SCRIPT=jni/Android.mk NDK_APPLICATION_MK=jni/Application.mk \ 
NDK_TOOLCHAIN=x86_64-4.9 APP_ABI=x86_64 V=1 -B NDK_DEBUG=1 \ 
NDK_LIBS_OUT=...\MyRoot\target\ndk-libs \ 
NDK_OUT=...\MyRoot\target\ndk-obj MyRoot # this MyRoot is unnecessary 

Sie auch, dass viele dieser Optionen (APP_ABI, NDK_TOOLCHAIN, etc.) finden nicht erforderlich, wenn Sie Ihre Application.mk und Verzeichnisstruktur korrekt eingerichtet sind.

+0

Ja, und das ist das Problem. Ich erwähnte, wenn ich es entferne, funktioniert es neben den Include-Fehlern. Mit Maven und der Android.mk wie bekomme ich das automatisch raus? Dies muss automatisiert werden. –

+0

Entschuldigung, es war nicht klar, welche "MyRoot" Sie entfernt haben. Können Sie den Fehler posten, den Sie erhalten, wenn Sie "MyRoot" entfernen? –

+0

Es kompiliert nur Fehler, da es keine Headerdateien in LOCAL_C_INCLUDES untersucht. Ich denke, das ist der nächste Schritt, aber im Moment wäre es schön, wenn ich MyRoot vom Ende des automatisierten Build-Prozesses –