Android Gradle插件:将NDK可执行文件打包到APK中

Android Gradle插件:将NDK可执行文件打包到APK中,gradle,android-ndk,Gradle,Android Ndk,正在尝试构建NDK二进制文件并将其打包到APK中 工作室构建: Android.mk include $(CLEAR_VARS) LOCAL_MODULE := hello LOCAL_SRC_FILES := ../../hello.c LOCAL_CFLAGS := -g -fPIE LOCAL_LDLIBS := -fPIE -pie include $(BUILD_EXECUTABLE) Android Studio 3.2.1 建造#AI-181.5540.7.3

正在尝试构建NDK二进制文件并将其打包到APK中

工作室构建:

Android.mk
include $(CLEAR_VARS)
LOCAL_MODULE    := hello
LOCAL_SRC_FILES := ../../hello.c
LOCAL_CFLAGS    := -g -fPIE
LOCAL_LDLIBS    := -fPIE -pie
include $(BUILD_EXECUTABLE)
  • Android Studio 3.2.1
  • 建造#AI-181.5540.7.32.5056338,建造于2018年10月9日
  • Gradle插件版本:3.2.1
  • Gradle版本:4.6
  • Java版本:JRE:1.8.0_152-release-1136-b06 x86_64
  • JVM:JetBrains s.r.o提供的OpenJDK 64位服务器虚拟机
  • 操作系统:macOS 10.13.6
复制步骤:

Android.mk
include $(CLEAR_VARS)
LOCAL_MODULE    := hello
LOCAL_SRC_FILES := ../../hello.c
LOCAL_CFLAGS    := -g -fPIE
LOCAL_LDLIBS    := -fPIE -pie
include $(BUILD_EXECUTABLE)
渐变配置

android {
compileSdkVersion 26
buildToolsVersion '28.0.3'

sourceSets {          
    main {
        manifest.srcFile 'AndroidManifest.xml'
        java.srcDirs = ['src']
        resources.srcDirs = ['src']
        aidl.srcDirs = ['src']
        renderscript.srcDirs = ['src']
        res.srcDirs = ['res']
        jniLibs.includes = ['anything']
    }
}
如果选择共享库而不是可执行文件,我可以看到
libhello.so
打包到/lib下的apk中。
如果设置为BUILD\u EXECUTABLE,则编译二进制可执行文件时不会发生任何事情。我不知道我在gradle配置中缺少了什么

这不是对您问题的回答,但仅供参考,您永远不需要明确提供
-g
标志,也不需要提供
-fPIE
-pie
,除非您使用的是旧NDK且
minSdkVersion
小于16(如果是,你需要提供两个可执行文件,因为ICS和棒棒糖上都没有可执行文件)。@DanAlbert,谢谢你的评论。我没有使用旧NDK,所以我清理了所有的标志。现在看起来好多了。