我想在调试和发布模式下使用不同的库 Android
I want to use different library in debug and release mode In Android
调试:
jniLibs/armeabi/a.so
发布:
jniLibs/armeabi/b.so
我想在调试模式下使用a.so,在发布模式下使用b.so
,我该如何在build.gradle
或其他模式下使用?
.so
图书馆是第三个图书馆,放在jniLibs/armeabi/
。我不知道具体的调用时间,所以不能用System.loadLibrary()
方法。
谢谢!
如果您使用 System.loadLibrary()
加载 SO 文件,请执行以下操作:
public final static boolean IS_DEBUG = BuildConfig.BUILD_TYPE.equalsIgnoreCase("debug");
static {
if(IS_DEBUG) {
System.loadLibrary("yourdebugso");
}
else {
System.loadLibrary("yourreleaseso");
}
}
这是另一种选择。像这样添加调试 SO 文件:
app/src/debug/jniLibs/armeabi/<yourdebug>.so
像这样在主源集中保留您的发布 SO 文件:
app/src/main/jniLibs/armeabi/<yourrelease>.so
重要的是 <yourdebug>.so
和 <yourrelease>.so
具有相同的文件名才能正常工作。
干杯!
历史上 NDK 支持 ARMv5 (armeabi
),以及 32 位和 64 位 MIPS
,但是 对这些 ABI 的支持在NDK r17.
此外,请注意以下来自 Google 的公告:
Starting August 1, 2019, your apps published on Google Play will need to support 64-bit architectures. 64-bit CPUs deliver faster, richer experiences for your users. Adding a 64-bit version of your app provides performance improvements, makes way for future innovation, and sets you up for devices with 64-bit-only hardware.
因此,您应该停止为您的 Android 应用程序使用旧版 armeabi
。并且,开始使用 64 位 ABI。
参见 https://developer.android.com/distribute/best-practices/develop/64-bit
和 https://developer.android.com/ndk/guides/abis 了解更多详情。
如何组织debug和release构建类型,理论上,你可以把mynative-lib.so
放在任何你喜欢的地方,例如他们在 /Users/<your-usr-name>/android/jniLibs
之下。但是,我想建议您安排 debug 和 release 构建类型如下( 每个支持 ABI):
jniLibs
├── debug
│ ├── arm64-v8a
│ │ └── mynative-lib.so
│ ├── armeabi-v7a
│ │ └── mynative-lib.so
│ ├── x86
│ │ └── mynative-lib.so
│ └── x86_64
│ └── mynative-lib.so
└── release
├── arm64-v8a
│ └── mynative-lib.so
├── armeabi-v7a
│ └── mynative-lib.so
├── x86
│ └── mynative-lib.so
└── x86_64
└── mynative-lib.so
然后配置您的 app/build.gradle
文件,使其指向正确的构建类型,即
android {
...
sourceSets {
main {
// put your jni libs that do not distinguish debug and release.
jniLibs.srcDirs += "/Users/<your-usr-name>/android/jniLibs"]
}
debug {
// put your debug version jni libs.
jniLibs.srcDirs += "/Users/<your-usr-name>/android/jniLibs/debug"]
}
release {
// put your release version jni libs.
jniLibs.srcDirs += "/Users/<your-usr-name>/android/jniLibs/release"]
}
}
...
}
注意:将/Users/<your-usr-name>/android/jniLibs
替换为您自己的正确路径。
调试:
jniLibs/armeabi/a.so
发布:
jniLibs/armeabi/b.so
我想在调试模式下使用a.so,在发布模式下使用b.so
,我该如何在build.gradle
或其他模式下使用?
.so
图书馆是第三个图书馆,放在jniLibs/armeabi/
。我不知道具体的调用时间,所以不能用System.loadLibrary()
方法。
谢谢!
如果您使用 System.loadLibrary()
加载 SO 文件,请执行以下操作:
public final static boolean IS_DEBUG = BuildConfig.BUILD_TYPE.equalsIgnoreCase("debug");
static {
if(IS_DEBUG) {
System.loadLibrary("yourdebugso");
}
else {
System.loadLibrary("yourreleaseso");
}
}
这是另一种选择。像这样添加调试 SO 文件:
app/src/debug/jniLibs/armeabi/<yourdebug>.so
像这样在主源集中保留您的发布 SO 文件:
app/src/main/jniLibs/armeabi/<yourrelease>.so
重要的是 <yourdebug>.so
和 <yourrelease>.so
具有相同的文件名才能正常工作。
干杯!
历史上 NDK 支持 ARMv5 (armeabi
),以及 32 位和 64 位 MIPS
,但是 对这些 ABI 的支持在NDK r17.
此外,请注意以下来自 Google 的公告:
Starting August 1, 2019, your apps published on Google Play will need to support 64-bit architectures. 64-bit CPUs deliver faster, richer experiences for your users. Adding a 64-bit version of your app provides performance improvements, makes way for future innovation, and sets you up for devices with 64-bit-only hardware.
因此,您应该停止为您的 Android 应用程序使用旧版 armeabi
。并且,开始使用 64 位 ABI。
参见 https://developer.android.com/distribute/best-practices/develop/64-bit
和 https://developer.android.com/ndk/guides/abis 了解更多详情。
如何组织debug和release构建类型,理论上,你可以把mynative-lib.so
放在任何你喜欢的地方,例如他们在 /Users/<your-usr-name>/android/jniLibs
之下。但是,我想建议您安排 debug 和 release 构建类型如下( 每个支持 ABI):
jniLibs
├── debug
│ ├── arm64-v8a
│ │ └── mynative-lib.so
│ ├── armeabi-v7a
│ │ └── mynative-lib.so
│ ├── x86
│ │ └── mynative-lib.so
│ └── x86_64
│ └── mynative-lib.so
└── release
├── arm64-v8a
│ └── mynative-lib.so
├── armeabi-v7a
│ └── mynative-lib.so
├── x86
│ └── mynative-lib.so
└── x86_64
└── mynative-lib.so
然后配置您的 app/build.gradle
文件,使其指向正确的构建类型,即
android {
...
sourceSets {
main {
// put your jni libs that do not distinguish debug and release.
jniLibs.srcDirs += "/Users/<your-usr-name>/android/jniLibs"]
}
debug {
// put your debug version jni libs.
jniLibs.srcDirs += "/Users/<your-usr-name>/android/jniLibs/debug"]
}
release {
// put your release version jni libs.
jniLibs.srcDirs += "/Users/<your-usr-name>/android/jniLibs/release"]
}
}
...
}
注意:将/Users/<your-usr-name>/android/jniLibs
替换为您自己的正确路径。