Moje pytanie jest skierowane do rodzimego rozwoju Androida dla 64-bitowych systemów Android.Android NDK -multlib wsparcie przy użyciu gradle
Szukam sposobu konfigurowania obsługi 32-bitowych skompilowanych bibliotek natywnych w 64-bitowym systemie Android przy użyciu systemu kompilacji gradle. Biblioteki, których powinna używać aplikacja, są dostępne tylko w wersji 32-bitowej. Byłoby bardzo czasochłonne i podatne na błędy przenoszenie tych bibliotek na 64-bitowe.
Dlatego chcę skonfigurować gradle do wdrożenia tych wstępnie zbudowanych plików binarnych 32-bitowych i do korzystania z 32-bitowej wersji aplikacji Android.
Obecna konfiguracja prowadzi do następującego błędu:
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)
Wydaje się jakby PathClassLoader
wygląda w niewłaściwych katalogów. Sprawdziłem dostarczony plik APK i brakuje w nim bibliotek. Wewnątrz apk nie ma folderu lib
. System kompilacji nie łączy się z 32-bitowymi bibliotekami. Ponieważ istnieje tylko jedna wersja dla wersji wstępnej dla armv7
, te biblioteki znajdują się w folderze app/src/main/jnilibs
.
Muszę dodać, że ta konfiguracja działa doskonale dla każdego 32-bitowego systemu Android. Próbowałem go z emulatorem i fizycznym urządzeniem wcześniej.
W jaki sposób należy aktywować obsługę wielobitowego 32/64-bitowego przy użyciu gradle? Albo jak można wdrożyć aplikację 32-bitową do 64-bitowego systemu Android przy użyciu Android Studio/gradle?
Przeszukałem Internet i znalazłem jeden link dotyczący tematu, ale dotyczy on starszego systemu kompilacji: https://source.android.com/source/64-bit-builds.html. Nie wiem, jak zastosować opis do stopniowania.
Używam Androida Studio (kompilacja: 141.1989493, 6 czerwca 2015 r.). The project/build.gradle
jest nietknięty. Plik app/build.gradle
wygląda następująco:
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'])
}
Czy ktoś mógłby wyjaśnić, co to jest "tłuszcz" w "productFlavours" i czy jest to obowiązkowe? – mithil1501