Android Framework 常见解决方案(29)添加应用开发的共享库

1 原理说明

通过设置配置文件public.libraries.txt以及在system分区下添加so动态库的方式,让系统扩展动态库。关于动态库的拷贝较为简单,直接配置即可,这里主要解读下配置文件public.libraries.txt。

1.1 public.libraries.txt配置文件是什么?

system/etc/public.libraries.txt 是 Android 系统中的一个配置文件,它的作用是声明一组可以被应用程序使用的原生(native)库。这个文件是 Android 运行时环境的一部分,用于定义哪些本地库(以 .so 文件形式存在)可以被应用程序动态加载和链接。

注意:在android系统中,如果想要修改这个文件,修改的路径为:$AOSP/system/core/rootdir/etc/public.libraries.android.txt

1.2 为什么要引入public.libraries.txt配置文件?

system/etc/public.libraries.txt 文件在 Android 系统中的设计目的是为了明确指定哪些本地库(.so 文件)可以被应用程序访问。这个文件列出了系统允许加载的本地库的名称,从而限制了应用程序能够链接和使用的库集合。这样的设计主要解决了以下问题:

  • 安全性和隔离性:通过限制应用程序能够访问的本地库,Android 系统能够提高安全性和隔离性。这防止了应用程序无意中或恶意地访问或依赖于系统内部的库,这些库可能包含敏感的内部 API 或实现细节。
  • 避免应用程序崩溃:在 Android 7.0(API 级别 24)及以后的版本中,系统默认不允许应用程序动态链接或加载非公共的本地库。这样做可以避免应用程序因为依赖于系统内部库而在运行时崩溃,特别是当这些内部库的版本或实现在未来的系统更新中发生变化时。
  • 提供稳定的应用环境:通过确保应用程序只能使用在 public.libraries.txt 中声明的库,Android 为开发者提供了一个更稳定的运行时环境。这有助于减少因系统更新导致的兼容性问题,并确保应用程序在不同版本的 Android 系统上的行为一致。
  • 控制库的可见性:public.libraries.txt 文件允许设备制造商和芯片供应商添加他们自己的库到公共库列表中,这样应用程序就可以使用这些库。这为设备制造商和芯片供应商提供了一种机制,使他们能够提供额外的功能和优化,同时保持应用程序的兼容性和稳定性。
  • 简化应用程序的构建和分发:通过明确指定可用的本地库,Android 系统简化了应用程序的构建和分发过程。开发者不需要担心他们的应用程序因为使用了不兼容的库而在某些设备上无法运行。同时,这也有助于减少因为库冲突导致的应用程序安装失败的情况。

综上所述,system/etc/public.libraries.txt 文件的设计是为了提高 Android 系统的安全性、稳定性和兼容性,同时为设备制造商和开发者提供了必要的工具来扩展和优化他们的应用程序和设备。

2 修改方案(通用)

这里假设要添加的库为libXXX.so,分为ArmV7和armV8两套ARM架构。

先修改配置文件,路径为:$AOSP/system/core/rootdir/etc/public.libraries.android.txt,在其中添加libXXX.so,具体如下:

# See https://android.googlesource.com/platform/ndk/+/master/docs/PlatformApis.md
libandroid.so
libaaudio.so
libamidi.so
libbinder_ndk.so
libc.so
libcamera2ndk.so
libdl.so
libEGL.so
libGLESv1_CM.so
libGLESv2.so
libGLESv3.so
libicu.so
libicui18n.so
libicuuc.so
libjnigraphics.so
liblog.so
libmediandk.so
libm.so
libnativehelper.so
libnativewindow.so
libneuralnetworks.so nopreload
libOpenMAXAL.so
libOpenSLES.so
libRS.so
libstdc++.so
libsync.so
libvulkan.so
libwebviewchromium_plat_support.so
libz.so
+libXXX.so

之后配置libXXX.so,将其分别放到路径(自定义即可,这里使用$AOSP/framework/base/data/libs路径作为参考),这里将文件拷贝到如下路径:

.
└── XXX└── libs├── arm64-v8a│   └── libXXX.so└── armeabi-v7a└── libXXX.so

接下来配置路径,一般在device/{platform}/base.mk中作修改,添加如下内容:

+PRODUCT_COPY_FILES += \
+    frameworks/base/data/libs/XXX/libs/arm64-v8a/libXXX.so:$(TARGET_COPY_OUT_SYSTEM)/lib64/libXXX.so \
+    frameworks/base/data/libs/XXX/libs/armeabi-v7a/libXXX.so:$(TARGET_COPY_OUT_SYSTEM)/lib/libXXX.so

之后编译system分区,验证即可

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/131.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis主从复制及其原理

为什么要有主从复制 为了避免服务的单点故障,通过给主从复制可以把数据复制多个副本放在不同的服务器上,拥有数据副本的服务器可以用于处理客户端的读请求,扩展整体的性能 Redis的主从复制搭建 准备3台机器,主服务器ip为192.16…

云服务器租用一年、1个月优惠价格表,阿里/腾讯/京东/华为云

现在租一个服务器多少一个月?优惠价格低至3.8元1个月,租用一个月云服务器收费价格表:阿里云和腾讯云2核2G3M服务器优惠价格61元一年,折合一个月5元,京东云轻量云主机5.8元一个月,华为云服务器优惠价格3.8元…

未来交通:UWB模块引领智能交通系统的发展方向

随着城市化进程的加速和交通需求的不断增长,智能交通系统正成为解决城市交通问题的重要途径之一。UWB不断发展正在引领智能交通系统的发展方向。UWB模块作为UWB技术的核心组成部分,具有精准定位、快速响应、抗干扰等特点,为智能交通系统的构建…

Swift-19-基础入门

从本章开始大概用10篇左右文章介绍下Swift语言的基本用法。 简介 Objective-C作为一门比较老的语言, 缺少很多现代语言所具备的高级特性。Swift是目标是比C,C, ObjC更安全可靠,从而减少开发者对在应用运行时出错的代码进行调试的时间成本。本…

github,raw.githubusercontent.com 等网址登陆不上不去的设置方法

目录 提示域名解析错误: 出现的现象: 解决办法:修改host host改完不生效 解决方案1: 解决方案2: 提示域名解析错误: 出现的现象: 登陆github,raw.githubusercontent.com 等网…

Jmeter 接口造10w条用户数据

1、将mysql-connector-java-5.1.22-bin.jar放到D:\apache-jmeter-5.5\lib\ext目录下 2、在测试计划中,添加mysql-connector-java-5.1.22-bin.jar包路径 3、添加-线程组-添加-配置元件-jdbc connection configuration 4、配置jdbc连接参数 设置变量名称:…

pyqt之QNetworkAccessManager

QNetworkAccessManager是Qt自带的一个网络请求库,网上很多说的很模糊,在这总结一下 # coding: utf-8 import json import sys from pathlib import Path from typing import Union from urllib.parse import urlencodefrom PyQt5.QtNetwork import QNetw…

关于 AssertionError: Torch not compiled with CUDA enabled 问题

你好,我是 shengjk1,多年大厂经验,努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注!你会有如下收益: 了解大厂经验拥有和大厂相匹配的技术等 希望看什么,评论或者私信告诉我! 文章目录 一…

javaWeb智能医疗管理系统

简介 在当今快节奏的生活中,智能医疗系统的崛起为医疗行业带来了一场革命性的变革。基于JavaWeb技术开发的智能医疗管理系统,不仅为医疗机构提供了高效、精准的管理工具,也为患者提供了更便捷、更个性化的医疗服务。本文将介绍一个基于SSM&a…

vue快速入门(二十九)echarts在vue中的使用

注释很详细&#xff0c;直接上代码 上一篇 新增内容 echarts.js的下载途径echarts的饼图示范 echarts.js&#xff0c;点击跳转&#xff0c;右键另存即可 源码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><m…

python内置函数frozenset()详解

Python 内置函数 frozenset() 1. 概述 frozenset() 是 Python 中的一个内置函数&#xff0c;用于创建一个不可变的集合&#xff08;frozenset&#xff09;。与普通的集合&#xff08;set&#xff09;不同&#xff0c;frozenset 不能被修改&#xff0c;也不能添加或删除元素。…

小试牛刀!

1.从双倍数组中还原原数组&#xff08;力扣&#xff0c;vector&#xff09; java式c解法。 class Solution { public:vector<int> findOriginalArray(vector<int>& changed) {int n changed.size();if(n % 2 1) return {};map<int, int> mp;for(int c…

Applied Spatial Statistics(二)统计推断:排列测试

Applied Spatial Statistics&#xff08;二&#xff09;统计推断&#xff1a;排列测试 本笔记本演示了如何执行假设检验和 p 值计算的排列检验。 相关系数Moran’s I 相关性 import pandas as pd import matplotlib.pyplot as plt import numpy as np from scipy.stats imp…

pycharm永久改变sys.path

进入pycharm&#xff0c;选择file->settings->interpreter 在这里选择图中所示show all 再单击左上角减号右侧第三个&#xff0c;长得像思维导图的图标 之后添加你的路径&#xff0c;确认即可

2024最新面试跳槽,软件测试面试题的整理与解析

今天接着来说说测试工程师面试比较高频的面试题&#xff0c;大家可以通过面试题内的一些解析再结合自己的真实工作经验来进行答题思路的提取、整理。 硬背答案虽可&#xff0c;但容易翻车哦。能够举一反三才是重点&#xff01; 1&#xff1a;请介绍一下UI自动化测试中三种时间等…

【若依前后端分离】设置已选中内容条数

示例&#xff1a; 将已选中n行加在了分页中&#xff0c;有分页才可以选择已选中多少行。如果想要不加分页也可以展示已选中n行&#xff0c;自行修改部分代码即可。 关键代码&#xff1a; 这使用了span&#xff0c;可使用其他元素 使用了Vue.js的v-if指令来根据条件是否渲染该…

前端JS必用工具【js-tool-big-box】,时间日期转换学习一

这一小节&#xff0c;我们学习一下 js-tool-big-box 这个npm 前端工具库&#xff0c;关于时间日期格式转换的一部分&#xff0c;后续还会有。 目录 1 安装 2 项目中引入 3 工具使用 3.1 年月日时分秒的单独处理 3.2 以上方法中第一个参数 3.3 日期时间的转换 3.4 更个…

6.C++:继承

一、继承 //1.类中的保护和私有在当前类中没有差别&#xff1b; //2.在继承后的子类中有差别&#xff0c;private在子类中不可见&#xff0c;所以用protected&#xff1b; class person { public:void print(){cout << "name:" << _name << endl;c…

#是啥,v-slot插槽的区别

在 Vue 3.x 中&#xff0c;您还可以使用 # 简写来代替 v-slot v-slot&#xff1a; v-slot 是 Vue 2.6 和 Vue 3.x 推荐的新的插槽语法。 v-slot 用于具名插槽&#xff0c;它允许您为插槽指定名称&#xff0c;并允许您传递具名插槽的内容。 例如&#xff0c;以下是使用 v-slot…

设计模式: 行为型之备忘录模式(13)

备忘录模式概述 备忘录模式&#xff08;Memento Pattern&#xff09;是一种行为设计模式&#xff0c;它允许在不破坏封装性的前提下捕获一个对象的内部状态&#xff0c;并在对象之外保存这个状态这样以后就可将该对象恢复到原先保存的状态。这种类型的设计模式属于行为模式在备…