Извлеките собственные библиотеки из предварительно созданного файла apk с помощью Android.mk

У меня есть APK-файл со встроенными собственными библиотеками. Когда я устанавливаю их с помощью adb, библиотеки правильно создаются в ‹path-to_package› / lib /, но я должен интегрировать свой apk в систему сборки вместе с файлом Android.mk. Что мне нужно добавить в make, чтобы извлечь библиотеки в целевую


person Vimalakshi Adiga    schedule 09.11.2020    source источник
comment
Непонятно, что вы имеете в виду под интегрировать мой apk в систему сборки вместе с файлом Android.mk. Как вы вообще создавали библиотеки?   -  person Michael    schedule 09.11.2020
comment
Я получил библиотеки от сторонних производителей. И теперь у меня есть apk, мне просто нужно написать make-файл, который копирует apk и собственные библиотеки на цель.   -  person Vimalakshi Adiga    schedule 09.11.2020
comment
См. developer.android.com/ndk/guides/prebuilts.   -  person Michael    schedule 09.11.2020


Ответы (2)


Вы можете найти пример в AOSP, например в external/chromium-webview проекте:

Также на SO уже обсуждались некоторые связанные темы:

person Mykola Khyliuk    schedule 09.11.2020
comment
Это не приведет к извлечению библиотек в папку lib / abi .. Даже я проверил chromium-webview на целевой машине. Он просто содержит apk, а не lib / abi - person Vimalakshi Adiga; 12.11.2020
comment
Да, потому что они упакованы в архив APK, если вы хотите увидеть их физически, например через adb shell вам нужно установить android:extractNativeLibs="true" в AndroidManifest.xml/application, это уже обсуждается здесь: stackoverflow.com/questions/63219377/ - person Mykola Khyliuk; 12.11.2020
comment
Да, я добавил «extractNativeLibs = true», но не помогает. Но когда я устанавливаю приложение вручную через adb, оно создает библиотеки в lib / abi. - person Vimalakshi Adiga; 12.11.2020
comment
Также мне нужен путь к этим библиотекам в моем приложении, есть ли способ получить путь к этим библиотекам, встроенным в сам apk? - person Vimalakshi Adiga; 12.11.2020
comment
convertABItoLibDir совпадает между именем ABI и именем каталога библиотеки, потому что они не всегда полностью совпадают, например ABI arm64-v8a соответствует папке lib arm64. - person Mykola Khyliuk; 12.11.2020
comment
Спасибо за поддержку. Я извлек библиотеки вручную и использую их в соответствии с stackoverflow.com/questions/64735430/ Но я пытаюсь рассмотреть ваше предложение об использовании встроенных библиотек - person Vimalakshi Adiga; 12.11.2020

  • Если у вас есть библиотеки, скопируйте библиотеки и создайте папку в aosp_source / external / yourlibfolder и вставьте туда свои библиотеки.

  • Перейдите в build / target / product и напишите этот код в соответствующем файле make (например, handhel_system.mk) для каждой библиотеки. Замените yourlibname каждым именем библиотеки

external/yourlibfolder/yourlibname.so:system/lib/yourlibname.so \
external/yourlibfolder/yourlibname.so:system/lib64/yourlibname.so \ 
  • Он добавит библиотеки, зависящие от приложения, в AOSP. Теперь, когда вы добавляете предварительно созданный apk в AOSP, он будет работать

Создайте папку в packages / app / yourappfolder и вставьте APK и создайте там файл

Это должен быть ваш файл сборки

# Adding Apk as system app in AOSP
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := Appname # It should be your apk name, and folder name should also be same 
LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_SUFFIX := .apk
LOCAL_MODULE_CLASS := APPS
LOCAL_CERTIFICATE := platform
include $(BUILD_PREBUILT)
person semw    schedule 10.11.2020
comment
Не могу я добавить общие библиотеки в файл сборки APK? - person Vimalakshi Adiga; 11.11.2020
comment
Вы можете упомянуть их в файле apk make, например, LOCAL_PREBUILT_JNI_LIBS := \ @lib/arm/yourlib1.so \ @lib/arm/yourlib2.so \ - person semw; 12.11.2020