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.
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 –
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? –
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 –