将APK直接放入系统目录中,会导致APK找不到so文件。正常情况下的安装是使用PackageManager,它会将so文件拷贝到系统读取的so目录(system/lib或system/lib64)下,提供给App使用;系统应用不会使用PackageManager去安装,所以在使用系统应用前,需要提前将so文件拷贝到system/lib或system/lib64目录下。
那么有没有方法,在系统应用预装时,就自动提取apk中的so拷贝到system/lib或system/lib64目录下呢。下面阐述一下系统预置app的整个流程,包含对这个问题的解决

1、前提:

(1)studio已编译好的app 并已经签名

(2)拥有系统源码

2、添加app到系统

将编译号的app在windows中解压,并得到 lib 文件夹,其中有很多的动态链接库(.so)

将编译好的apk如test.apk放到系统源码的packages/apps/test(test 自己创建的)中,

把上面解压的lib文件夹也放到test中。

3、编写Android.mk文件

include $(CLEAR_VARS)
# Module name should match apk name to be installed
LOCAL_MODULE := Test
LOCAL_MODULE_TAGS := optional //不管是user 还是eng 版本都会编译此app
LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
LOCAL_PREBUILT_JNI_LIBS := \
  @lib/armeabi/libtest.so \ //注意前面要用tab键隔开。  通过这种方式来完成半自动提取apk中的so,并拷贝到system/lib或system/lib64目录下
  @lib/armeabi/libtest2.so //这是你需要添加的so。 如果是 armeabi-v7a 直接替换掉armeabi
LOCAL_CERTIFICATE := PRESIGNED //表示app已经签名
include $(BUILD_PREBUILT)
如果so文件是32位,而源码是针对64机器的,那么还需要在android.mk文件中加上
LOCAL_MULTILIB := 32
4、在系统预置app的配置文件中添加我们目录

我的系统源码的配置文件在bulid/target/product/generic.mk 这个文件中又包含其他的配置文件,最终就是在配置文件中的 PRODUCT_PACKAGES 标志下添加你的test目录

PRODUCT_PACKAGES := \
    Bluetooth \
    Camera2 \
    Gallery2 \
    Music \
    MusicFX \
    OneTimeInitializer \
    Provision \
    SystemUI \
    WallpaperCropper\

test

这样就可以了

android系统添加预置APP(so库自动释放)的更多相关文章

  1. Android.mk添加本地程序和库的经常使用模版

    Android.mk添加本地程序和库的经常使用模版 Android中添加本地程序或者库.这些程序和库与其所在路径没有关系.仅仅与它们的配置文件Android.mk有关.Android.mk文件里可以主 ...

  2. 开发一个基于 Android系统车载智能APP

    很久之前就想做一个车载相关的app.需要实现如下功能: (1)每0.2秒更新一次当前车辆的最新速度值. (2)可控制性记录行驶里程. (3)不连接网络情况下获取当前车辆位置.如(北京市X区X路X号) ...

  3. Android系统自带APP分析——短信app

    Android操作系统本身就是一个巨大的开源软件仓库,熟悉它既可以了解到Android系统的设计框架,也可以获得高效的应用程序编写方式.本文所分析的源码来自于Google官方的AOSP源码4.0.1_ ...

  4. Android 系统添加SELinux权限

    本文为博主原创文章,转载请注明出处:https://i.cnblogs.com/EditPosts.aspx?postid=11185476 CPU:RK3288 系统:Android 5.1 SEL ...

  5. Android系统添加key和keypad

    平台:MTK 一.添加一个按键 1.在DCT tool keypad list 文件增加新按键的选项alps\mediatek\source\dct\Keypad_YuSu.cmp中添加新键,如SMS ...

  6. Android系统下,用adb实现自动获取应用性能数据

    [自动化测试模式] 支持以adb shell命令的形式启动和运行.需要注意的是,office系列软件可能会更改命令中的字符,导致命令不可用!请手工输入命令,或从附带的command.txt文本中复制. ...

  7. Android系统驱动【转】

    本文转载自:http://www.hovercool.com/en/%E6%B7%BB%E5%8A%A0%E9%A9%B1%E5%8A%A8%E6%A8%A1%E5%9D%97#a_.E5.9B.9B ...

  8. 第一章Android系统移植与驱动开发概述--读书笔记

    以前,初步学习过嵌入式Linux驱动开发的基础课程,对于驱动开发可以说是有了一点点微末的基础吧.首先我们要对Android嵌入式系统有一个初步的认识,Android系统发展到今天已经具备了完善的架构. ...

  9. 在android系统调试中使用tinyalsa命令【转】

    本文转载自:http://blog.csdn.net/tangdexi112/article/details/17579021 我们在进行音频调试的时候,需要使用tinymix.tinyplay.ti ...

随机推荐

  1. android 实现点击edittext的“小眼睛”切换明密文

    android 实现点击edittext的“小眼睛”切换明密文    版权声明:本文为博主原创文章,未经博主允许不得转载.   很多时候,我们为了用户的隐私安全,需要在密码输入的时候,显示密文.为了更 ...

  2. 013_实践HTTP206状态:部分内容和范围请求

    HTTP 2xx范围内的状态码表明了:"客户端发送的请求已经被服务器接受并且被成功处理了".HTTP/1.1 200 OK是HTTP请求成功后的标准响应,当你在浏览器中打开www. ...

  3. Mysql_安装

    安装环境:win7 1.下载zip安装包: MySQL8.0 For Windows zip包下载地址:https://dev.mysql.com/downloads/file/?id=476233, ...

  4. Messenger更改系统语言以后无法登陆,提示“初始设置被修改”

    在安装messenger机器上使用SQL management studio打开数据库,链接YCD的数据库,找到dbo.Dic_Defaults的表,编辑打开以后找到“CultureInfo”两项,删 ...

  5. mac用BootCamp装windows装完之后驱动问题

    刚装完会有一个临时盘里面找到BootCamp文件夹然后运行setup.exe,装完即可.

  6. 如何给框架添加API接口日志

    前言 用的公司的框架,是MVC框架,看了下里面的日志基类,是操作日志,对增删改进行记录, 夸张的是一张业务的数据表 需要一张专门的日志表进行记录, 就是说你写个更新,添加的方法都必须写一遍操作日志,代 ...

  7. spl_autoload_register()怎样注册多个自动加载函数?

    <?php /*function __autoload($class){ require("./class/".$class.".php"); }*/ f ...

  8. 访问docker仓库

    仓库(Repositiry)是集中存放镜像的地方,分为公共仓库和私有仓库.一个容易与之混淆的概念是注册服务器(Registry).实际上注册服务器是存放仓库的具体服务器,一个注册服务器上可以有多个仓库 ...

  9. 洛谷 P1443 马的遍历

    终于遇到一个简单纯粹一点的bfs了...... 题目链接:https://www.luogu.org/problemnew/show/P1443 题目是求到达一个点的最短步数 也就是说我只要bfs遍历 ...

  10. 开篇python

    测试代码 #!/usr/bin/env python # -*- coding: UTF-8 -*- import os import sys print(os.getcwd) print(sys.v ...