Android 12 如何加载 native 原生库

在 Android 7.0 及更高版本中,系统库与应用库是分开的。

原生库的命名空间

图1. 原生库的命名空间

 原生库的命名空间可防止应用使用私有平台的原生 API(例如使用 OpenSSL)。该命名空间还可以避免应用意外使用平台库(而非它们自己的库)的问题(如使用 libpng 时)。应用库很难意外使用内部系统库(反之亦然)。

除了标准的公共原生库之外,芯片供应商(从 Android 7.0 起)和设备制造商(从 Android 9 起)还可以选择提供可供应用访问的其他原生库,方法是将它们放在相应的库文件夹中,并在 .txt 文件中显式列出它们。

库文件夹是:

  • /vendor/lib(对于芯片供应商的 32 位库)和 /vendor/lib64(对于芯片供应商的 64 位库)
  • /system/lib(对于设备制造商的 32 位库)和 /system/lib64(对于设备制造商的 64 位库)

.txt 文件是:

  • /vendor/etc/public.libraries.txt(对于芯片供应商的库)
  • /system/etc/public.libraries-COMPANYNAME.txt(对于设备制造商的库),其中 COMPANYNAME 指的是制造商的名称(例如 awesome.company)。COMPANYNAME 应符合 [A-Za-z0-9_.-]+ 格式(字母数字字符 , _, .(点)和 -。如果某些库来自外部解决方案提供商,则可以在设备中包含多个此类 .txt 文件。

设备制造商公开的 system 分区中的原生库必须命名为 lib*COMPANYNAME.so,例如 libFoo.awesome.company.so。 换句话说,没有公司名称后缀的 libFoo.so 不得公开。库文件名中的 COMPANYNAME 必须与列出库名称的 txt 文件名称中的 COMPANYNAME 匹配。

作为 AOSP 一部分的原生库不得公开(默认情况下公开的标准公共原生库除外)。只有芯片供应商或设备制造商添加的其他库可供应用访问。

以 SDK 版本 31 (Android 12) 或更高版本为目标平台的应用必须在应用清单中使用 <uses-native-library> 标记显式指定其原生共享库依赖项。如果设备上不存在所请求库的任何部分,则未安装应用。应用安装时,系统仅向他们提供已请求的原生共享库。这意味着,应用无法访问应用清单中未显示的原生共享库。

如果应用以 Android 11(API 级别 30)或更低版本为目标平台,则无需使用 <uses-native-library> 标记。在这种情况下,任何原生共享库均可访问,而不管它是否为 NDK 库。

此元素还会影响应用在特定设备上的安装。如果此元素存在并且其 android:required 属性设置为 true,则 PackageManager 框架将不允许用户安装应用,除非用户设备上存在相应的库。

下一部分详细介绍了 android:required 属性。

<uses-native-library
  android:name="string"
  android:required=["true" | "false"] />

android:name

库文件的名称。

android:required

布尔值,指示应用是否需要 android:name 指定的库。

  • "true":如果没有此库,则应用将无法正常运行。系统不允许将应用安装在没有此库的设备上。
  • "false":如果此库存在,应用会使用此库,但必要时也可在没有此库的情况下运行。 系统允许安装应用,即使不存在此库也是如此。如果您使用 "false",则需要自行负责妥善处理库不存在的情况。

默认值为 "true"

例如在Application 中:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">
<--
权限添加
-->
    
    <application
        android:name=".CameraApplication"
        android:allowBackup="true"
        android:dataExtractionRules="@xml/data_extraction_rules"
        android:extractNativeLibs="true"
        android:fullBackupContent="@xml/backup_rules"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:largeHeap="true"
        android:requestLegacyExternalStorage="true"
        android:resizeableActivity="false"
        android:roundIcon="@mipmap/ic_launcher"
        android:supportsRtl="true"
        android:theme="@style/Theme.AppCompat.NoActionBar"
        tools:targetApi="31">
        <activity
            android:name=".MainActivity"
            android:configChanges="orientation|keyboardHidden|screenSize"
            android:exported="true"
  
            android:theme="@style/Theme.AppCompat.NoActionBar.Fullscreen" />
        
        <uses-native-library android:name="***.so" android:required="false" />
        <uses-native-library android:name="***.so" android:required="false" />
        <uses-native-library android:name="***.so" android:required="false" />
    </application>

</manifest>

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

LangChain入门:22.使用 arXiv 工具开发科研助理

有一些工具&#xff0c;比如 SerpAPI&#xff0c;你已经用过了&#xff0c;这里我们再来用一下 arXiv 工具。arXiv 本身就是一个论文研究的利器&#xff0c;里面的论文数量比 AI 顶会还早、还多、还全。那么把它以工具的形式集成到 LangChain 中&#xff0c;能让你在研究学术最…

高精度PWM脉宽调制信号转模拟信号隔离变送器1Hz-10KHz转0-5V/0-10V/1-5V,0-10mA/0-20mA/4-20mA

主要特性: >>精度等级&#xff1a;0.1级。产品出厂前已检验校正&#xff0c;用户可以直接使用 >>辅助电源&#xff1a;8-32V 宽范围供电 >>PWM脉宽调制信号输入: 1Hz~10KHz >>输出标准信号&#xff1a;0-5V/0-10V/1-5V,0-10mA/0-20mA/4-20mA等&…

动手写sql 《牛客网80道sql》

第1章&#xff1a;SQL编写基础逻辑和常见问题 基础逻辑 SELECT语句: 选择数据表中的列。FROM语句: 指定查询将要从哪个表中检索数据。WHERE语句: 过滤条件&#xff0c;用于提取满足特定条件的记录。GROUP BY语句: 对结果进行分组。HAVING语句: 对分组后的结果进行条件过滤。O…

根据 Figma 设计稿自动生成 Python GUI | 开源日报 No.221

ParthJadhav/Tkinter-Designer Stars: 8.0k License: BSD-3-Clause Tkinter-Designer 是一个用于快速创建 Python GUI 的工具&#xff0c;通过使用 Figma 设计软件&#xff0c;可以轻松地生成美观的 Tkinter GUI。 主要功能和优势包括&#xff1a; 拖放界面设计比手写代码更快…

Computer Organization/Architecture 计算机组织/架构/结构 重要观念和笔记(陆续更新中,2024/04/17周三,已更新)

前情提要&#xff1a;我的说法比较白话&#xff0c;希望可以更好理解其中一些观念&#xff0c;这篇会以中文为主&#xff0c;专有名词还是用英文&#xff0c;好吧应该会中英穿插&#xff0c;自己学的时候感觉听中文会吸收比较快&#xff0c;也可能是我英文比较烂的关系&#xf…

每日算法4/17

1552. 两球之间的磁力 题目 在代号为 C-137 的地球上&#xff0c;Rick 发现如果他将两个球放在他新发明的篮子里&#xff0c;它们之间会形成特殊形式的磁力。Rick 有 n 个空的篮子&#xff0c;第 i 个篮子的位置在 position[i] &#xff0c;Morty 想把 m 个球放到这些篮子里&…

点击广告就能日赚收益1000+?开发一款看广告赚收益的APP靠谱吗?

APP对接广告变现是开发者获得收益的重要方式之一&#xff0c;对一些体量较小的APP来说&#xff0c;甚至是唯一的收益来源。开发者是否可以单独开发一款全是广告的APP&#xff0c;拿出一部分的广告收益给点击者&#xff0c;类似在快手极速版里看广告获得金币一个原理&#xff0c…

聚观早报 | 小度推出DuerOS X;问界新M5开启预定

聚观早报每日整理最值得关注的行业重点事件&#xff0c;帮助大家及时了解最新行业动态&#xff0c;每日读报&#xff0c;就读聚观365资讯简报。 整理丨Cutie 4月18日消息 小度推出DuerOS X 问界新M5开启预定 库克访问印尼 方程豹产品矩阵正式发布 苹果折叠屏iPhone新专利…

ESP-IDF下载与安装完整流程

本文主要看参考官网说明&#xff0c;如下&#xff1a; Windows 平台工具链的标准设置 - ESP32 - — ESP-IDF 编程指南 latest 文档 (espressif.com) 一、概述 ESP-IDF需要安装一些必备工具&#xff0c;才能围绕ESP32构建固件&#xff0c;包括&#xff1a; PythonGit交叉编译…

steam加速器哪个好 2024最新steam好用加速器推荐

steam加速器哪个好 2024最新steam好用加速器推荐 对于热爱游戏的玩家们来说&#xff0c;steam这个游戏平台对于大家来说肯定不陌生&#xff0c;但是由于平台服务器的原因&#xff0c;我们在大陆登录平台经常会出现卡顿掉线等原因&#xff0c;那么今天小编就为大家带来可以流畅…

Redis入门到通关之解决Redis缓存一致性问题

文章目录 ☃️概述☃️数据库和缓存不一致采用什么方案☃️代码实现☃️其他 ☃️概述 由于我们的 缓存的数据源来自于数据库, 而数据库的 数据是会发生变化的, 因此,如果当数据库中 数据发生变化,而缓存却没有同步, 此时就会有 一致性问题存在, 其后果是: 用户使用缓存中的过…

python-使用bottle时间简易服务器

python-使用bottle时间简易服务器 背景调试读取文本所有内容字段解释json字符串解析追加写入文件 整理后整理后写入文件方法将目录下所有文本的内容批量追加到一个文本搜索字符串方法实现简易服务器通过浏览器访问 背景 202310.txt内容是一段json字符串&#xff0c;目的是通过…

MySQL连接查询之等值连接

连接查询 又称多表查询&#xff0c;当查询结果来自多张数据表的时候&#xff0c;就需要用到连接查询。 建一个新库包含两张表实验&#xff08;ta&#xff1a;id&#xff0c;age字段&#xff0c;tb&#xff1a;id&#xff0c;name&#xff0c;ta_id&#xff09;&#xff1a; …

基于SpringBoot的“人职匹配推荐系统”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“人职匹配推荐系统”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 网上商城购物系统结构图 管理员登录界面图 个…

WebKit内核游览器

WebKit内核游览器 基础概念游览器引擎Chromium 浏览器架构Webkit 资源加载这里就不得不提到http超文本传输协议这个概念了&#xff1a; 游览器多线程HTML 解析总结 基础概念 百度百科介绍 WebKit 是一个开源的浏览器引擎&#xff0c;与之相对应的引擎有Gecko&#xff08;Mozil…

CTFHUB RCE作业

题目地址&#xff1a;CTFHub 完成情况如图&#xff1a; 知识点&#xff1a; preg_match_all 函数 正则匹配函数 int preg_match_all ( string $pattern , string $subject [, array &$matches [, int $flags PREG_PATTERN_ORDER [, int $offset 0 ]]] )搜索 subject 中…

rust学习(BorrowMut异常)

现象&#xff1a; 编译没有问题&#xff0c;运行时出现&#xff1a; 代码&#xff1a; pub fn do_test() {let v Arc::new(RefCell::new(100));let v1 v.try_borrow_mut().unwrap();let v2 v.try_borrow_mut().unwrap(); } 原因&#xff1a; 一个cell貌似不能同时被借用…

实际案例分享:如何利用上位机优化生产过程

在现代工业生产中&#xff0c;利用上位机进行生产过程优化已成为一种常见的做法。通过实时监控、数据采集和远程控制&#xff0c;上位机可以帮助企业提高生产效率、降低成本&#xff0c;并实现生产过程的自动化和智能化。本文将通过一个实际案例来介绍如何利用上位机优化生产过…

Nature 哈佛新型超材料Metafluid粘度、透明度、弹性可变,可用于编程液压机器人

液体都有“智能”、可编程了&#xff1f; 最近&#xff0c;一种被称为“智能"液体的多功能可编程的新型超材料——Metafluid&#xff0c;登上了Nature。 它由哈佛大学SEAS的研究团队研发&#xff0c;据说可自由调节弹性、光学特性、粘度。 甚至能够在牛顿流体和非牛顿流…

RHCE第二次作业

一.配置server主机要求如下&#xff1a; 1.server主机的主机名称为 ntp_server.example.com 2.server主机的IP为&#xff1a; 172.25.254.100 3.server主机的时间为1984-11-11 11&#xff1a;11&#xff1a;11 4.配置server主机的时间同步服务要求可以被所有人使用 二.设定cli…