预制包含很多lib库的apk

1. Androidmk写法

预编译时使用LOCAL_PREBUILT_JNI_LIBS,来制定库的路径

LOCAL_PATH := $(call my-dir)


define get-all-libraries-module-name-in-subdirs
$(sort $(shell cd $(LOCAL_PATH) ; find -L $(1) -name "*.so"))
endef


ALL_LIBRARIES_MODULE_NAME := $(call get-all-libraries-module-name-in-subdirs, lib/arm64-v8a)

$(warning ALL_LIBRARIES_MODULE_NAME:---  $(ALL_LIBRARIES_MODULE_NAME) )

#integrate the apk
include $(CLEAR_VARS)
LOCAL_MODULE        := BinderTest
LOCAL_MODULE_TAGS   := optional
LOCAL_MODULE_CLASS  := APPS
LOCAL_CERTIFICATE   := PRESIGNED
LOCAL_MODULE_SUFFIX := .apk
LOCAL_SRC_FILES     := ./BinderTest.apk
LOCAL_MULTILIB := 64
LOCAL_MODULE_PATH   := $(TARGET_OUT_SYSTEM_APPS)
LOCAL_PREBUILT_JNI_LIBS := $(ALL_LIBRARIES_MODULE_NAME)
include $(BUILD_PREBUILT)

2. 编译结果

编译log看,只是把库拷贝到system/app/BinderTest/lib下面,并没有预制到system/lib64,这才是正确的预制方法

[ 82% 51/62] Copy: out/target/product/msm8996_gvmq/system/app/BinderTest/lib/arm64/libplug_ins_project.so
[ 83% 52/62] Copy: out/target/product/msm8996_gvmq/system/app/BinderTest/lib/arm64/libdumpcrash.so
[ 83% 52/62] Copy: out/target/product/msm8996_gvmq/system/app/BinderTest/lib/arm64/libsync_cxx.so
[ 85% 53/62] Copy: out/target/product/msm8996_gvmq/system/app/BinderTest/lib/arm64/libifly_aime.so
[ 85% 53/62] Copy: out/target/product/msm8996_gvmq/system/app/BinderTest/lib/arm64/libtbt.so
[ 87% 54/62] Copy: out/target/product/msm8996_gvmq/system/app/BinderTest/lib/arm64/libGNaviDice.so
[ 88% 55/62] Copy: out/target/product/msm8996_gvmq/system/app/BinderTest/lib/arm64/liblinkProxy-1.0.0.so
[ 90% 56/62] Copy: out/target/product/msm8996_gvmq/system/app/BinderTest/lib/arm64/libplug_ins_project.so
[ 91% 57/62] Copy: out/target/product/msm8996_gvmq/system/app/BinderTest/lib/arm64/libmqtt_jni.so
[ 93% 58/62] Copy: out/target/product/msm8996_gvmq/system/app/BinderTest/lib/arm64/libsync_cxx.so
[ 95% 59/62] Copy: out/target/product/msm8996_gvmq/system/app/BinderTest/lib/arm64/libisstts.so
[ 96% 60/62] Copy: out/target/product/msm8996_gvmq/system/app/BinderTest/lib/arm64/libhsl.so
[ 98% 61/62] Copy: out/target/product/msm8996_gvmq/system/app/BinderTest/lib/arm64/libtbt.so
[ 98% 61/62] Install: out/target/product/msm8996_gvmq/system/app/BinderTest/BinderTest.apk
[100% 62/62] Install: out/target/product/msm8996_gvmq/system/app/BinderTest/BinderTest.apk

out目录看,apk拷贝到了app/lib下面,这样apk就是用这个位置的库

android/out/target/product/msm8996_gvmq/system/app/BinderTest ls
BinderTest.apk  lib  oat

ubuntu@ubuntu:/android/out/target/product/msm8996_gvmq/system/app/BinderTest/lib/arm64$ ll
-rwxrwxr-x 1 ubuntu ubuntu  1738664 11月 15 17:10 libxxx.so*
-rwxrwxr-x 1 ubuntu ubuntu  1354248 11月 15 17:10 libxxxxxx.so*
-rwxrwxr-x 1 ubuntu ubuntu  1243400 11月 15 17:10 libaime_key_gd.so*
-rwxrwxr-x 1 ubuntu ubuntu    59720 11月 15 17:10 libapssdk.so*

3. LOCAL_PREBUILT_JNI_LIBS原理

LOCAL_PREBUILT_JNI_LIBS := \
            lib/armeabi/libcom_iflytek_inputmethod_bundlesetting.so \
            lib/armeabi/libcom_iflytek_inputmethod_mmp.so \

原理就是调用copy-one-file,把LOCAL_PREBUILT_JNI_LIBS的值循环拷贝到app/lib下面

@build/core/install_jni_libs.mk
my_prebuilt_jni_libs := $(LOCAL_PREBUILT_JNI_LIBS)

@build/core/install_jni_libs_internal.mk
# Install my_prebuilt_jni_libs as separate files.
$(foreach lib, $(my_prebuilt_jni_libs), \
    $(eval $(call copy-one-file, $(lib), $(my_app_lib_path)/$(notdir $(lib)))))

预制APK安装APK的区别主要在于它们的创建、用途以及使用环境。 ### 预制APK 预制APK通常是指在应用开发过程中先构建好的应用包文件,它已经包含了应用的所有资源、代码和依赖项,并进行了优化处理。预制APK在内部测试阶段非常有用,因为它可以方便地在开发环境中快速部署给测试人员或用户,无需通过Google Play或其他应用商店进行分发。此外,预制APK还可以用于自动化测试,如集成到CI/CD流程中,或者作为调试工具提供给开发者。 ### 安装APK 安装APK指的是用户从应用市场下载的应用文件或开发者直接分发给用户的APK文件。用户通过手机的“设置”->“安全”选项允许未知来源安装后,才能将该文件安装到设备上。安装后的应用程序将会存储在设备的系统目录下,可供用户长期使用。安装APK通常是用户获取新应用或更新现有应用的主要途径。 ### 区别总结 1. **用途与目的**:预制APK主要用于内部测试和自动化测试等开发过程,而安装APK则是供最终用户下载并安装使用的版本。 2. **创建与发布**:预制APK是在应用开发阶段由开发者创建并控制的,而安装APK则需要经过应用市场的审核流程,以确保其安全性、兼容性和质量。 3. **权限与安全性**:预制APK可能会包含特定于开发环境的权限和配置,这在安装APK时不会自动存在。此外,安装APK时可能存在对设备权限的要求,这需要用户明确同意。 4. **更新机制**:预制APK通常不会像安装APK那样支持通过应用商店自动更新功能,因此如果需要更新应用,开发者往往需要重新生成新的预制APK并提供给用户。 ### 相关问题: 1. 预制APK是如何被内部测试团队使用的? 2. 在何种情况下适合使用预制APK而非安装APK? 3. 安装APK的安全风险有哪些?如何降低这些风险?
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值