在Android中选择特定ABI的两种不同方式
我正在使用在Android中选择特定ABI的两种不同方式,android,cmake,android-ndk,arm64,abi,Android,Cmake,Android Ndk,Arm64,Abi,我正在使用CMake在我当前的Android项目中使用JNI。为了保持我的apk大小较小,我只想支持arm64-v8a。我发现有两种方法可以做到这一点: (1) 在Cmake块内设置选项 defaultConfig { applicationId "com.example.something.here" minSdkVersion 23 targetSdkVersion 27 versionCode 1 versionName "1.0" test
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"
}
}
}
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"
}
}
(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"
abiFilters "arm64-v8a"
}
}
}
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
。为什么在ndk
块(选项2)内设置有效ndk
与externalNativeBuild{ndkBuild
不同
APK的大小不同。选项1生成了15.0 MB,而选项2生成了12.3 MB。这是为什么
指定应该为APK构建并打包到APK中的ABIs gradlendk{abiFilters
只指定应该为哪个ABIs gradle进行构建(因此,如果出于某种原因需要,您可以为实际不包含在APK中的ABIs进行构建)externalNativeBuild{****{abiFilters
ndk时{abiFilters
您告诉gradle也可以将旧库打包到APK中,从而增加APK的大小
两个选项生成的APK之间是否存在速度或性能差异
如果你指的是运行时速度的差异,那么我看不到任何差异。构建时间和安装时间可能会有差异,这取决于你构建了多少,以及你在APK中打包了多少