Поэтому я предоставляю двоичные файлы в виде удаленной зависимости, упакованной как aar
. Библиотека Android имеет файлы libMyLibrary.so
в каталоге src/main/jniLibs/<abi>/
, поэтому при сборке и развертывании они находятся в каталоге jni aar. Единственное, что есть в библиотеке, это файл манифеста, не содержащий ничего, кроме имени пакета package.name.A
.
импорт package.name.A
в качестве зависимости от другого проекта, different.package.B
, приводит к тому, что все правильно упаковано в сборку, а общие библиотеки содержатся в lib/<abi>/libMyLibrary.so
apk для отладки/релиза. Однако при установке они не извлекаются в собственный каталог приложения.
Фактически установленный 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?
Руководство/помощь будут очень признательны!