我正在使用CMake
在我当前的Android项目中使用JNI。为了保持我的apk大小,我想只支持arm64-v8a
。我发现有两种方法可以做到:
(1)在Cmake
块
defaultConfig {
applicationId "com.example.something.here"
minSdkVersion 23
targetSdkVersion 27
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
externalNativeBuild {
cmake {
cppFlags "-frtti -fexceptions"
abiFilters "arm64-v8a"
}
}
}
(2)在ndk
块
defaultConfig {
applicationId "com.example.something.here"
minSdkVersion 23
targetSdkVersion 27
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
externalNativeBuild {
cmake {
cppFlags "-frtti -fexceptions"
}
}
ndk {
abiFilters "arm64-v8a"
}
}
他们都创建了工作APK。但我对三件事感到好奇。
CMake
作为JNI。为什么设置ndk
块(选项2)有效?答案 0 :(得分:1)
我只使用CMake for JNI。为什么在ndk块中设置(选项2)有效?
ndk
与externalNativeBuild { ndkBuild
不同。
apks的大小不同。选项1生成15.0 MB,而选项2生成12.3 MB。那是为什么?
ndk { abiFilters
指定哪些ABI应该为您的APK构建并打包。externalNativeBuild { **** { abiFilters
仅指定Gradle应为哪些ABI构建(因此,如果您出于某种原因需要,可能会为您实际不包含在APK中的ABI构建)。很难说为什么会出现规模差异,因为我们并没有坐在您的开发机器上。但有一个合理的解释是,您的项目目录中有另一个ABI的现有库。然后,当您移除ndk { abiFilters
时,您告诉gradle,将旧版本的资料库打包到您的APK中也可以,从而增加了APK的大小。
这两个选项生成的apks之间是否有任何速度或性能差异?
如果你的意思是运行时速度差异,那么我看不到。构建时间和安装时间可能会有所不同,具体取决于您构建的数量以及打包到APK中的数量。