【发布时间】:2015-08-26 00:33:25
【问题描述】:
我的问题是针对 64 位 Android 系统的原生 Android 开发。
我正在寻找一种方法来使用 gradle 构建系统在 64 位 Android 系统上配置对 32 位编译的本机库的支持。应用程序应使用的库仅作为 32 位版本提供。将这些库移植到 64 位会非常耗时且容易出错。
因此,我想配置 gradle 以部署这些预构建的 32 位二进制文件并使用 32 位版本的 Android 应用程序。
当前配置导致如下错误:
E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: <application_name>, PID: 2170
java.lang.UnsatisfiedLinkError:
dalvik.system.PathClassLoader
[DexPathList[[zip file "/data/app/<application_name>/base.apk"],
nativeLibraryDirectories=[/vendor/lib64, /system/lib64]]]
enter code here`couldn't find "libmynativelibrary.so"
at java.lang.Runtime.loadLibrary(Runtime.java:366)
PathClassLoader 似乎在错误的目录中查找。我检查了提供的 apk 文件,它缺少库。 apk 中没有lib 文件夹。构建系统不包含 32 位库。
由于armv7 只有一个预构建版本,这些库位于app/src/main/jnilibs 文件夹中。
我必须补充一点,此设置适用于任何 32 位 Android 系统。我之前用模拟器和物理设备试过。
应该如何使用 gradle 激活多架构 32/64 位支持?或者如何使用 Android Studio/gradle 将 32 位应用程序部署到 64 位 Android 系统?
我在网上搜索了一个与该主题相关的链接,但它指的是较旧的构建系统:https://source.android.com/source/64-bit-builds.html。我不知道如何采用描述来gradle。
我正在使用 Android Studio(内部版本:141.1989493,2015 年 6 月 6 日)。
project/build.gradle 保持不变。 app/build.gradle 文件如下所示:
apply plugin: 'com.android.application'
android {
compileSdkVersion 22
buildToolsVersion "22.0.1"
defaultConfig {
applicationId "<application_name>"
minSdkVersion 1
targetSdkVersion 22
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'),
'proguard-rules.pro'
}
debug {
debuggable true
}
}
productFlavors {
armv7 {
ndk {
abiFilter "armeabi-v7a"
}
}
fat
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
}
【问题讨论】:
标签: android android-studio android-ndk android-gradle-plugin 32bit-64bit