我在Android工作室有一个NDK项目,可以添加和减去2个数字
@Override
protected void onCreate(Bundle savedInstanceState) {
JniAdapter jniAdapter = new JniAdapter();
Log.d(LOG_TAG, "Sum of 1 and 1 is: " + jniAdapter.add(1, 1));
Log.d(LOG_TAG, "Difference of 1 and 1 is: " + jniAdapter.subtract(1, 1));
}
添加操作由外部静态库提供,外部共享库提取,使用ol'school ndk-build构建;我希望我的gradle文件编译这两个库并构建另一个共享库。但看起来静态库正在编译中,而不是共享库,我得到了共享库的UnSatifiedLinkError。没有共享库,一切正常。怎么回事?
我的gradle文件
apply plugin: 'com.android.model.application'
model {
android {
.....
defaultConfig.with {
.......
}
}
android.ndk {
moduleName = "native"
ldLibs += ["mySharedLib"]
ldLibs += ["myStaticLib"]
cppFlags += "-I${staticLibIncludeRoot}".toString()
cppFlags += "-I${sharedLibIncludeRoot}".toString()
}
android.productFlavors {
create ("arm7") {
ndk.abiFilters += "armeabi-v7a"
ndk.ldFlags += "-L${staticLibRoot}/armeabi-v7a".toString()
ndk.ldFlags += "-L${sharedLibRoot}/armeabi-v7a".toString()
}
}
}
dependencies {
.....
}
答案 0 :(得分:2)
这正是共享库的本质。没有传统的程序来“编译”,链接或以其他方式将共享库转换为更大的库(一些工具有助于条带化或缩小共享库,但这是一个不同的故事)。
在Android Studio项目中使用预建的共享库是完全可以的,并通过gradle处理它们。
最简单的方法是将此类共享库的路径添加到jniLibs.srcDirs
。 Android插件会将相关的二进制文件复制到生成的APK中。