【问题标题】:Extract native libs from prebuilt apk file using Android.mk使用 Android.mk 从预构建的 apk 文件中提取本机库
【发布时间】:2021-02-21 12:14:05
【问题描述】:

我有一个带有捆绑本机库的 APK 文件。当我使用 adb 安装它们时,库会在 /lib/ 中正确创建,但我必须将我的 apk 与 Android.mk 文件一起集成到构建系统中。我需要在 make 中添加什么才能将库提取到目标上

【问题讨论】:

  • 不清楚您所说的“将我的 apk 与 Android.mk 文件一起集成到构建系统”是什么意思。您最初是如何构建这些库的?
  • 我从第三方获得了库。现在我有了 apk,我只需要编写一个 makefile 来复制目标上的 apk 和本机库。

标签: android android-ndk android-install-apk android-native-library android-make


【解决方案1】:
  • 如果您有库,则复制库并在 aosp_source/external/yourlibfolder 中创建一个文件夹并将您的库粘贴到那里。

  • 转到构建/目标/产品并在您的相关品牌中编写此代码 每个库的文件(例如handhel_system.mk)。将 yourlibname 替换为每个库名称

external/yourlibfolder/yourlibname.so:system/lib/yourlibname.so \
external/yourlibfolder/yourlibname.so:system/lib64/yourlibname.so \ 
  • 它将在 AOSP 中添加应用程序依赖库。现在,当您添加您的 在 AOSP 中预构建的 apk 它可以工作

在 packages/app/yourappfolder 中创建一个文件夹并粘贴 APK 并在其中制作文件

这应该是你的 make 文件

# 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)

【讨论】:

  • 我不能在 APK make 文件中添加共享库吗?
  • 您可以在 apk make 文件中提及它们,例如 LOCAL_PREBUILT_JNI_LIBS := \ @lib/arm/yourlib1.so \ @lib/arm/yourlib2.so \
【解决方案2】:

您可以在 AOSP 中找到一个示例,例如在external/chromium-webview 项目中:

另外一些相关主题已经在 SO 上讨论过:

【讨论】:

  • 这不会将库提取到 lib/abi 文件夹中。即使我在目标上检查了 chromium-webview。它只包含 apk 而不是 lib/abi
  • 是的,因为它们被打包到 APK 存档中,如果您想实际查看它们,例如通过adb shell你需要在AndroidManifest.xml/application中设置android:extractNativeLibs="true",这里已经讨论过了:stackoverflow.com/questions/63219377/…
  • 是的,我添加了 'extractNativeLibs=true',但没有帮助。但是当我通过 adb 手动安装应用程序时,它会在 lib/abi 中创建库。
  • 我的应用程序中还需要这些库的路径,有没有办法让这些库的路径嵌入到 apk 本身中?
  • String pluginDir = new File(getPackageCodePath()).getParent() + "/lib/" + convertABItoLibDir(Build.SUPPORTED_ABIS[0]);
猜你喜欢
  • 1970-01-01
  • 2012-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多