Удаленная двоичная общая библиотека nativeLibrary не извлекается - PullRequest
0 голосов
/ 09 июля 2020

Итак, я предоставляю двоичные файлы как удаленную зависимость, упакованную как aar. В библиотеке android файлы libMyLibrary.so находятся в каталоге src/main/jniLibs/<abi>/, поэтому при сборке и развертывании они находятся в каталоге jni aar. Единственное, что есть в библиотеке, это файл манифеста, не содержащий ничего, кроме имени пакета package.name.A

, импорт package.name.A как зависимость от другого проекта, different.package.B, приводит к тому, что все правильно упаковывается в сборке а общие библиотеки содержатся в apk отладки / выпуска lib/<abi>/libMyLibrary.so. Однако они не извлекаются в собственный каталог приложения при установке.

Фактически установленный apk показывает, что файлы .so находятся в apk. ZipFile(context.applicationInfo.sourceDir).getEntry("lib/${Build.SUPPORTED_ABIS[0]}/libMyLibrary.so") работает, и я могу извлечь их таким образом (просто не в nativeDir приложения, исключение безопасности). И System.mapLibraryName("MyLibrary") возвращает «libMyLibrary.so» ...

Они были извлечены до того, как я предоставил их как удаленную зависимость, и они содержались в каталоге src/main/jniLibs/<abi>/ приложения. Теперь единственный способ получить его для извлечения, поставляя их как удаленную зависимость через aar, - это включить в манифест android:extractNativeLibs="true".

Как я могу получить вещи для правильного извлечения без нужно объявить это в моем манифесте?

Есть ли что-то, что мне нужно объявить в манифесте удаленной библиотеки, чтобы после слияния Android знал об общей собственной библиотеке, и она будет извлекаться правильно? Нужен ли мне файл Android .mk?

Руководство / помощь были бы очень признательны!

Ответы [ 2 ]

0 голосов
/ 19 июля 2020

Добавление в different.package.B build.gradle android block

compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
}

решило мою проблему. Файлы * .so, предоставленные через aar, теперь извлекаются в собственный каталог приложения.

см .: https://github.com/05nelsonm/TOPL-Android-TorBinary

0 голосов
/ 13 июля 2020

В этом ответе содержится довольно подробное описание использования функциональности extractNativeLibs и того, как вам нужно изменить процесс упаковки / развертывания, чтобы оставить его равным false: { ссылка }. tl; dr: ваш APK будет загружаться больше, но загружается быстрее и занимает меньше места на телефоне, потому что его не нужно распаковывать.

Здесь находится документация по extractNativeLibs, которая также предлагает некоторое понимание: https://developer.android.com/guide/topics/manifest/application-element#extractNativeLibs

Если установлено значение false, ваши собственные библиотеки должны быть выровнены по страницам и храниться в несжатом виде в APK.

Вот документация по инструменту zipalign, который можно запустить вручную или включить в сценарий оболочки в процессе развертывания (предварительной подписи): https://developer.android.com/studio/command-line/zipalign

zipalign [-f] [-v] 4 infile.apk outfile.apk # f overwrites outfile.apk, v for verbose, 4 byte is the only allowed value that does anything for alignment

или в gradle, до шага (ов) подписания:

task zipAlign {
   workingDir "<my apk output dir>"
   commandLine "zipalign -f -v 4 infile.apk outfile.apk"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...