AndroidStudio NDK 编译问题

移动开发 码拜 9年前 (2016-05-29) 1459次浏览
最近没事想用用NDK,之前用eclipse 写过NDK,现在想用Androidstudio试试,本人这里用的androidStudio 2.0,结果照着原来的方式写就报错,在网上对应的解决了这些问题,可是本人在build/intermediates/ndk/debug/lib/没有数据。按网上的说法,运行编译之后就会有 .so文件生成。可是本人的没有,尽管编译通过,可是运行就报错,说找不到这个.so文件。所以现在希望各位高手分享点经验给本人。谢谢!
注:本人这里是用android.mk配置NDK编译信息,假如不用mk,直接用gradle android ndk这个标签配置是可以正常运行的,原因是这个本人只试过简单的jni源码编译,复杂的没成功。求指导
解决方案

40

你可以选择屏蔽gradle自动生成的Android.mk,而去使用本人编写的Android.mk文件去编译:
在build.gradle中:

applyplugin: "com.android.application"
android {   
………………
………………
    sourceSets {
        main {
            jni.srcDirs = []//设置禁止gradle生成Android.mk
            jniLibs.srcDirs = ["src/main/jniLibs"]//设置目标的so存放路径
        }
     }
}

然后继续在build.gradle中添加:

tasks.withType(JavaCompile) {
compileTask -> compileTask.dependsOn "ndkBuild","copyThirdso", "copyJniLibs"
}
}
task ndkBuild(type: Exec) {//设置新的so的生成目录
def ndkBuildingDir = project.plugins.findPlugin("com.android.application").sdkHandler.getNdkFolder().absolutePath
    commandLine ndkBuildingDir + "/ndk-build.cmd", "-C", "src/main/jni",
"NDK_OUT=$buildDir/intermediates/ndk/obj",
"NDK_APP_DST_DIR=$buildDir/intermediates/ndk/libs/\$(TARGET_ARCH_ABI)"
}
task copyJniLibs(type: Copy) {//将新生成的so拷贝到jniLibs目录
    from fileTree(dir: file(buildDir.absolutePath + "/intermediates/ndk/libs"), include: "**/*.so")
    into file("src/main/jniLibs")
}
task copyThirdso(type: Copy) {//将第三方的so拷贝到jniLibs目录
    from file("src/main/jni/vvw/libs")
    into file("src/main/jniLibs")
}

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明AndroidStudio NDK 编译问题
喜欢 (0)
[1034331897@qq.com]
分享 (0)