首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android NDK Make File和Maven构建问题

Android NDK Make File和Maven构建问题
EN

Stack Overflow用户
提问于 2016-04-08 20:19:16
回答 1查看 284关注 0票数 0

我只想说,我对Android NDK非常陌生,因此,我一直在尝试阅读有关它的Android文档。当我尝试在Maven中使用它(通过插件)时,我遇到了一些问题。下面是我的maven插件片段以及我的Android.mk文件。

pom.xml (插件部分):

代码语言:javascript
复制
<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文件如下:

代码语言:javascript
复制
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)

所以我得到的错误如下:

代码语言:javascript
复制
...\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)中列出的任何包含文件。

这可能是愚蠢的事情,但我在这里迷路了。任何帮助都是非常感谢的。

EN

回答 1

Stack Overflow用户

发布于 2016-04-08 21:46:11

在命令的末尾,你有一个浮动的'MyRoot‘。我非常确定删除它可以解决这个错误。

代码语言:javascript
复制
...\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

您还会发现其中许多选项(APP_ABI、NDK_TOOLCHAIN等)如果您的Application.mk和目录结构设置正确,则不需要。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36499417

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档