2016-04-08 83 views
0

Android NDK için oldukça yeni olduğumu söyleyeyim ve bunun üzerine Androids belgelerini incelemeye çalışıyorum. Maven'de (eklentiler aracılığıyla) kullanmaya çalışırken, bazı sorunlarla karşılaştım. Benim maven eklentileri snippet'leri Android.mk dosyamın yanı sıra altında.Android NDK Dosya ve Maven Oluşturma Sorunları Yapın

pom.xml (eklentileri kısım):

<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> 

Benim dizin yapısı gibidir MyRoot aşağıdaki -> jni -> (c/cpp dosyaları). Ve tabii ki java dosyaları için standart dizin yapısı. MyRoot bile kullanılıyor neden

...\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. 

emin değilim:

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) 

yüzden alıyorum hata şu var: My Android.mk dosya şudur. Komutu 'MyRoot' komutunu kullanarak el ile yaptığımda, derleme işlemi başlıyor ancak Android.mk dosyasında (LOCAL_C_INCLUDES) listelenen dosyalarımdan herhangi birini kullanmıyor gibi görünüyor.

Muhtemelen aptalca bir şey ama burada bir kayboldum. Herhangi bir yardım takdir edilir.

cevap

0

Komutunuzun sonunda yüzen bir 'MyRoot' var. Bu hatayı çözecek olan kaldırma konusunda eminim. senin Application.mk ve dizin yapısı doğru kurulmuş olup olmadığını

...\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 

Ayrıca bu seçeneklerden (APP_ABI, NDK_TOOLCHAIN, vs.) birçok bulacaksınız gereksizdir.

+0

Evet, sorun budur. Bunu kaldırırsam, eklem hatalarından başka bir şey yapamayacağımı söylemiştim. Maven ve Android.mk kullanarak bunu otomatik olarak buradan nasıl çıkarabilirim? Bunun otomatik –

+0

olması gerekiyor. Üzgünüz, hangi 'MyRoot'u kaldırdığınız belli değildi. 'MyRoot'u kaldırırsanız aldığınız hatayı gönderir misiniz? –

+0

Sadece LOCAL_C_INCLUDES içindeki başlık dosyalarına bakmadığı için derleme hataları. Ben bir sonraki adım olduğunu düşünüyorum, ama şimdi o zaman ben MyRoot otomatik yapı işlemi –