私は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)にリストされているインクルードファイルを使用していないようです。
おそらく何かばかげているが、私はここで失われている。どんな助けもありがとうございます。
はい、それは問題です。私はそれを削除する場合は、インクルードエラーを除いて動作すると言いました。 MavenとAndroid.mkを使うと、どうすれば自動的にそこから抜けますか?これは自動化する必要があります –
申し訳ありませんが、あなたが削除していた「MyRoot」がどれかはっきりしませんでした。あなたが 'MyRoot'を削除すると、あなたが得るエラーを投稿できますか? –
LOCAL_C_INCLUDESのヘッダファイルを見ていないのでコンパイルエラーです。私は次のステップだと思っていますが、自動ビルドプロセスの終わりからそのMyRootを取り除くことができればいいと思います。 –