预制包含很多lib库的apk
文章目录
- 1. Androidmk写法
- 2. 编译结果
- 3. LOCAL_PREBUILT_JNI_LIBS原理
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"))
endefALL_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 oatubuntu@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)))))
预制包含很多lib库的apk相关推荐
- Lib库使用学习笔记
Lib库使用学习笔记 转自:http://blog.csdn.net/macky0668/article/details/6044867 技术前沿 2008-03-31 14:21:10 阅读177 ...
- iOS静态库SDK制作(包含第三方静态库)
本文来自简书,原文地址:http://www.jianshu.com/p/155a3cfb765e 前言 以下所涉及的框架和库只针对iOS而言,不确保在其他平台也适用. 最近由于公司业务需要,要求封装 ...
- windows平台下使用cmake构建静态lib库以及使用静态lib库gtest项目
有些时候我们需要将部分代码编译成单独的一个库,然后在另一个项目中去使用这个库 大部分是linux环境下的指令,但是也差不是很多 记录一下构建的经过 目录 1.使用cmake构建及使用lib库 构建li ...
- lib库-动态链接库的制作和使用(Linux)
目录 意义 动态链接库格式 实现目标 具体操作过程 参考 补:.bashrc配置文件的作用(直观理解) 意义 在"纸上谈兵: 算法与数据结构"中,我在每一篇都会有一个C程序,用于实 ...
- lib库实现UI定制化
背景 随着公司项目越来越多,会使用到公共的UI组件,那么将组件抽离出来独立成一个lib库是有必要的.但是,不同的项目存在一定的差异化是不可避免的,这时候,如何在提高公共组件可复用性又可实现UI差异?那 ...
- Keil工程Lib库文件的制作和运用
最近看了百度手环开源项目,发现所有的算法都被封装成了一个lib文件在keil中调用 也是第一次学习到. 问题引出:为什么要做成lib库? 1.有些方案公司为了将自己写的关键部分源代码不进行公开,但是同 ...
- .h头文件 .lib库文件 .dll动态链接库文件关系
.h头文件是编译时必须的,lib是链接时需要的,dll是运行时需要的. 附加依赖项的是.lib不是.dll,若生成了DLL,则肯定也生成 LIB文件.如果要完成源代码的编译和链接,有头文件和lib就够 ...
- 包含目录、库目录、附加包含目录、附加库目录、附加依赖项之详解
VS项目中的包含目录.库目录.附加包含目录.附加库目录.附加依赖项均在"项目->属性->配置属性"下进行配置,具体说明如下: VC++目录: 包含目录:寻找#inclu ...
- .h头文件 .lib库文件 .dll动态库文件之间的关系
.h头文件是编译时必须的,lib是链接时需要的,dll是运行时需要的. 附加依赖项的是.lib不是.dll,若生成了DLL,则肯定也生成 LIB文件.如果要完成源代码的编译和链接,有头文件和li ...
- C++ 包含目录、库目录、附加依赖项详解
在使用opencv库,以及其他库的时候,经常会需要添加包含目录.库目录.附加依赖项等.现做一个总结吧. 1.包含目录 是.h的头文件所在的目录,如果没有正确包含目录,代码中会出现红色的警告,各种未定义 ...
最新文章
- 当OpenCV遇到VS2019时,以前的配置方式翻车了….
- insert获取主键、联合关联查询
- 1.6 动态数据抓取 -- PyQuery详解
- cache_purge php
- ai人工智能收入_人工智能促进收入增长:使用ML推动更有价值的定价
- left join 重复数据_Python数据分析整理小节
- 如何选择自己适合的引流平台?
- linux的cimserver是什么服务,openpegasus的启动方式(即cimserver的启动方式)
- 主板检测卡c5_主板检测卡上的05.00是什么意思帮帮忙
- matlab 布莱克曼,基于MATLAB的布莱克曼窗FIR数字低通滤波器设计程序
- 【无线上网】无线网络小常识
- 2020年12月中国编程语言排行榜 - Java地位岌岌可危
- 《研磨设计模式》 与 《设计模式之禅》对比
- JSP中文乱码解决方案了解和TOMCAT中文乱码解决
- win7系统中的消息队列服务器,高手分析win7系统安装消息队列的详细
- 猫咪藏在哪个房间python作业_猫咪生气躲进房间,众人找到后,猫咪一脸疑问:听说你们在找我...
- 企业在实施采购管理时需要注意哪些问题?
- 嵌入式主板上使用的插针式加密锁
- 考拉定时任务框架kSchedule
- 谷歌高质量外链,google英文外链怎么做效果好?
热门文章
- 深入理解Plasma(四):Plasma Cash
- 阿里云提示ECS实例存在挖矿活动的处理
- Flutter Navigator基础使用
- LWIP应用开发|DNS域名解析
- 蛋白质二级结构预测Linux,哪些蛋白质二级结构预测软件可以批量使用?
- Hadoop详解(七)——Hive的原理和安装配置和UDF,flume的安装和配置以及简单使用,flume+hive+Hadoop进行日志处理
- 学习汇编对编程有什么帮助?如何学习
- 图机器学习——2.1 节点嵌入:基于随机游走
- 1500个字给你讲透什么是分账系统
- in comment after two dashes (--) next character must be not - (position: START_TAG seen ...