2016-04-08 20 views
0

私はAndroid NDKの新機能だと言えば、Androidsのドキュメントを参照しようとしています。私はMavenで(プラグイン経由で)それを利用しようとしているときにいくつかの問題に遭遇しました。私のMavenプラグインスニペットは私のAndroid.mkファイルの下にあります。Android NDK MakeファイルとMavenビルドの問題

のpom.xml(プラグイン部分):

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

MyRootは、次のように私のディレクトリ構造がある - > JNI - >(C/CPPファイル)。もちろん、javaファイルの標準的なディレクトリ構造です。私のAndroid.mkファイルは以下の通りです:

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) 

だから私は取得していますエラーは以下の通りである:

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

私はMyRootも使用されている理由はわかりません。そして、私が手動で 'MyRoot'コマンドを実行すると、ビルドプロセスが始まりますが、Android.mkファイル(LOCAL_C_INCLUDES)にリストされているインクルードファイルを使用していないようです。

おそらく何かばかげているが、私はここで失われている。どんな助けもありがとうございます。

答えて

0

コマンドの最後には、浮動小数点の「MyRoot」があります。私はかなりこのエラーを解決する削除を確認しています。

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

また、あなたのApplication.mkとディレクトリ構造が正しく設定されている場合、これらのオプション(などAPP_ABI、NDK_TOOLCHAIN、)の多くは不必要であることがわかります。

+0

はい、それは問題です。私はそれを削除する場合は、インクルードエラーを除いて動作すると言いました。 MavenとAndroid.mkを使うと、どうすれば自動的にそこから抜けますか?これは自動化する必要があります –

+0

申し訳ありませんが、あなたが削除していた「MyRoot」がどれかはっきりしませんでした。あなたが 'MyRoot'を削除すると、あなたが得るエラーを投稿できますか? –

+0

LOCAL_C_INCLUDESのヘッダファイルを見ていないのでコンパイルエラーです。私は次のステップだと思っていますが、自動ビルドプロセスの終わりからそのMyRootを取り除くことができればいいと思います。 –