文章目录

  • 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相关推荐

  1. Lib库使用学习笔记

    Lib库使用学习笔记 转自:http://blog.csdn.net/macky0668/article/details/6044867 技术前沿 2008-03-31 14:21:10 阅读177  ...

  2. iOS静态库SDK制作(包含第三方静态库)

    本文来自简书,原文地址:http://www.jianshu.com/p/155a3cfb765e 前言 以下所涉及的框架和库只针对iOS而言,不确保在其他平台也适用. 最近由于公司业务需要,要求封装 ...

  3. windows平台下使用cmake构建静态lib库以及使用静态lib库gtest项目

    有些时候我们需要将部分代码编译成单独的一个库,然后在另一个项目中去使用这个库 大部分是linux环境下的指令,但是也差不是很多 记录一下构建的经过 目录 1.使用cmake构建及使用lib库 构建li ...

  4. lib库-动态链接库的制作和使用(Linux)

    目录 意义 动态链接库格式 实现目标 具体操作过程 参考 补:.bashrc配置文件的作用(直观理解) 意义 在"纸上谈兵: 算法与数据结构"中,我在每一篇都会有一个C程序,用于实 ...

  5. lib库实现UI定制化

    背景 随着公司项目越来越多,会使用到公共的UI组件,那么将组件抽离出来独立成一个lib库是有必要的.但是,不同的项目存在一定的差异化是不可避免的,这时候,如何在提高公共组件可复用性又可实现UI差异?那 ...

  6. Keil工程Lib库文件的制作和运用

    最近看了百度手环开源项目,发现所有的算法都被封装成了一个lib文件在keil中调用 也是第一次学习到. 问题引出:为什么要做成lib库? 1.有些方案公司为了将自己写的关键部分源代码不进行公开,但是同 ...

  7. .h头文件 .lib库文件 .dll动态链接库文件关系

    .h头文件是编译时必须的,lib是链接时需要的,dll是运行时需要的. 附加依赖项的是.lib不是.dll,若生成了DLL,则肯定也生成 LIB文件.如果要完成源代码的编译和链接,有头文件和lib就够 ...

  8. 包含目录、库目录、附加包含目录、附加库目录、附加依赖项之详解

    VS项目中的包含目录.库目录.附加包含目录.附加库目录.附加依赖项均在"项目->属性->配置属性"下进行配置,具体说明如下: VC++目录: 包含目录:寻找#inclu ...

  9. .h头文件 .lib库文件 .dll动态库文件之间的关系

     .h头文件是编译时必须的,lib是链接时需要的,dll是运行时需要的. 附加依赖项的是.lib不是.dll,若生成了DLL,则肯定也生成 LIB文件.如果要完成源代码的编译和链接,有头文件和li ...

  10. C++ 包含目录、库目录、附加依赖项详解

    在使用opencv库,以及其他库的时候,经常会需要添加包含目录.库目录.附加依赖项等.现做一个总结吧. 1.包含目录 是.h的头文件所在的目录,如果没有正确包含目录,代码中会出现红色的警告,各种未定义 ...

最新文章

  1. 当OpenCV遇到VS2019时,以前的配置方式翻车了….
  2. insert获取主键、联合关联查询
  3. 1.6 动态数据抓取 -- PyQuery详解
  4. cache_purge php
  5. ai人工智能收入_人工智能促进收入增长:使用ML推动更有价值的定价
  6. left join 重复数据_Python数据分析整理小节
  7. 如何选择自己适合的引流平台?
  8. linux的cimserver是什么服务,openpegasus的启动方式(即cimserver的启动方式)
  9. 主板检测卡c5_主板检测卡上的05.00是什么意思帮帮忙
  10. matlab 布莱克曼,基于MATLAB的布莱克曼窗FIR数字低通滤波器设计程序
  11. 【无线上网】无线网络小常识
  12. 2020年12月中国编程语言排行榜 - Java地位岌岌可危
  13. 《研磨设计模式》 与 《设计模式之禅》对比
  14. JSP中文乱码解决方案了解和TOMCAT中文乱码解决
  15. win7系统中的消息队列服务器,高手分析win7系统安装消息队列的详细
  16. 猫咪藏在哪个房间python作业_猫咪生气躲进房间,众人找到后,猫咪一脸疑问:听说你们在找我...
  17. 企业在实施采购管理时需要注意哪些问题?
  18. 嵌入式主板上使用的插针式加密锁
  19. 考拉定时任务框架kSchedule
  20. 谷歌高质量外链,google英文外链怎么做效果好?

热门文章

  1. 深入理解Plasma(四):Plasma Cash
  2. 阿里云提示ECS实例存在挖矿活动的处理
  3. Flutter Navigator基础使用
  4. LWIP应用开发|DNS域名解析
  5. 蛋白质二级结构预测Linux,哪些蛋白质二级结构预测软件可以批量使用?
  6. Hadoop详解(七)——Hive的原理和安装配置和UDF,flume的安装和配置以及简单使用,flume+hive+Hadoop进行日志处理
  7. 学习汇编对编程有什么帮助?如何学习
  8. 图机器学习——2.1 节点嵌入:基于随机游走
  9. 1500个字给你讲透什么是分账系统
  10. in comment after two dashes (--) next character must be not - (position: START_TAG seen ...