Meine Frage bezieht sich auf die native Android-Entwicklung für 64-Bit-Android-Systeme.
Ich bin auf der Suche nach einer Möglichkeit, die Unterstützung von 32-Bit kompilierten nativen Bibliotheken auf einem 64-Bit Android-System zu konfigurieren, das das Gradle-Build-System verwendet. Die Bibliotheken, die die Anwendung verwenden soll, sind nur als 32-Bit-Build verfügbar. Es wäre sehr zeitaufwendig und fehleranfällig, diese Bibliotheken auf 64 Bit zu portieren.
Daher möchte ich grittle konfigurieren, um diese vorgefertigten 32-Bit-Binärdateien zu implementieren und auch eine 32-Bit-Version der Android-Anwendung zu verwenden.
Die aktuelle Konfiguration führt zu folgendem Fehler:
%Vor% Es scheint, als ob das PathClassLoader
in den falschen Verzeichnissen aussieht. Ich habe die angegebene APK-Datei überprüft und es fehlen die Bibliotheken. Es gibt keinen lib
Ordner in der apk. Das Build-System schließt nicht die 32-Bit-Bibliotheken ein.
Da es für armv7
nur eine Prebuild-Version gibt, befinden sich diese Bibliotheken im Ordner app/src/main/jnilibs
.
Ich muss hinzufügen, dass dieses Setup perfekt für jedes 32-Bit-Android-System funktioniert. Ich habe es vorher mit dem Emulator und einem physischen Gerät ausprobiert.
Wie soll man die Multiarch 32 / 64bit Unterstützung mit Gradle aktivieren? Oder wie ist es möglich, eine 32-Bit-Anwendung mit Android Studio / Gradle auf einem 64-Bit-Android-System bereitzustellen?
Ich habe im Internet gesucht und einen Link zum Thema gefunden, aber es bezieht sich auf das ältere Build-System: Ссылка . Ich weiß nicht, wie ich die Beschreibung übernehmen soll.
Ich benutze Android Studio (Build: 141.1989493, 6. Juni 2015).
Das project/build.gradle
ist unberührt. Die Datei app/build.gradle
sieht folgendermaßen aus:
Das Konzept von mulilib ist nur für Projekte, die Teil eines Android-Systems sind, und Sie sollten die Option android: multiarch nicht einstellen, da Sie nur 32bit-Bibliotheken haben, da diese Option nur für 32- und 64-Bit-Anwendungen gilt Bibliotheken zu anderen installierten Anwendungen.
64-Bit-Android-Systeme unterstützen 32-Bit-Anwendungen direkt. Sie müssen Ihre App nur so verpacken, dass Ihre .so-Dateien wie bei allen Android-Geräten in lib/(armeabi-v7a,x86,...)
der APK enthalten sind.
Zum Installationszeitpunkt werden die Bibliotheken der vom Gerät bevorzugten Architektur installiert. Dh: Wenn es keinen x86_64-Ordner gibt, werden die x86-Bibliotheken installiert. Wenn es keinen arm64-v8a-Ordner gibt, werden die Armea-v7a-Bibliotheken installiert, und Ihre App wird im 32-Bit-Modus ausgeführt.
Wenn Sie nichts unter lib haben, bedeutet das, dass Android Studio Ihre .so-Dateien nicht kennt. Standardmäßig wird nach ihnen in jniLibs/(armeabi-v7a,x86,...)
gesucht, daher sollten Sie sie dort platzieren oder sourceSets.main.jniLibs.srcDir
in das Verzeichnis Ihrer Wahl ändern.
Um die 32bit-Anwendungsbereitstellung für 64-Bit-Android-Systeme zu erhalten, müssen Sie einen armv7 productFlavor
und einen Unterordner im Ordner jniLibs
definieren, der die entsprechende Architektur benennt.
Produktgeschmacksdefinition in app/build.gradle
:
Native Bibliotheksstruktur:
%Vor%Tags und Links android android-ndk android-studio android-gradle 32bit-64bit