我的問題是針對64位Android系統的原生Android開發。Android NDK -multlib支持使用gradle
我正在尋找一種方法來配置在使用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(Build: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'])
}
任何人都可以解釋一下'productFlavors'中的'fat'是什麼,如果它是必需的? – mithil1501