IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Android 关于ApplicationInfo flags快速了解 -> 正文阅读

[移动开发]Android 关于ApplicationInfo flags快速了解

关于ApplicationInfo flags快速了解

??在Application中我们可以常常通过添加flags来标志一些属性和能力,比如android:protectionLevel="system"或android:protectionLevel="signatureOrSystem"就表示添加了FLAG_SYSTEM这个标志,表示属于系统级应用,当然,这个FLAG_SYSTEM依赖于签名检查或权限。

flag的判断和使用

??首先在Application中flages的默认值是0,而这些标志则用移位运算符号(<<) 表示。
??以flag:FLAG_TEST_ONLY为例子

  1. 对于int值 1 来说,他的二进制为00000000 00000000 00000000 00000001(32位),FLAG_TEST_ONLY= 1<<8; 相对于 将1向左移动8位即00000000 00000000 00000001 00000000 == 2的8次方 即256
  2. 如果此时我们的flags只添加了FLAG_DEBUGGABLE,那么此时flags这个标识的值为2 (二进制表示为00000000 00000000 00000000 00000010),当我们需要再去添加FLAG_TEST_ONLY标识时,其实是做了或位运算**,flags=flags|FLAG_TEST_ONLY**
  3. 或位运算运算过程即二进制下同一位上如果有1则赋1,如下
计算对象第32位第10位第9位第8位第7位第6位第5位第4位第3位第2位第1位
flags000000000010
FLAG_TEST_ONLY000100000000
计算后flags000100000010

??所以flags的最后结果就是00000000 00000000 00000001 00000010 即 258,这时可能会有同学好奇为什么不直接加起来,这样结果不是一样的吗?这时其实就要考虑一种情况,我的flags如果在代码中添加的这个flag(比如FLAG_TEST_ONLY)之前已经添加过了,就会重复计算,那么这时我们的结果就会出现问题,所以或位是目前较为好的选择。
??简单来说,你可以把每一位想成一个flag,如果你添加了此flag那么这个二进制位上的值肯定是1,如果没有就是0,所以flag作为int类型的最多也只能有62种标志位(包括正反),其中首位是符号位,这样的好处就是不用通过设置大量的bool变量来标识是否开启。

    /**
     * Value for {@link #flags}: set to true if this application would like to
     * allow debugging of its
     * code, even when installed on a non-development system.  Comes
     * from {@link android.R.styleable#AndroidManifestApplication_debuggable
     * android:debuggable} of the &lt;application&gt; tag.
     */
    public static final int FLAG_DEBUGGABLE = 1<<1;
    /**
     * Value for {@link #flags}: this is set if the application has specified
     * {@link android.R.styleable#AndroidManifestApplication_testOnly
     * android:testOnly} to be true.
     */
    public static final int FLAG_TEST_ONLY = 1<<8;
    
    public int flags = 0;
flag判断

和或位运算相似,我们通过与位运算即可判断该flags是否已添加了这个标志符,具体原理和或位相似,这里不做赘述,使用样例如下:

		if ((getApplicationInfo().flags&ApplicationInfo.FLAG_TEST_ONLY)!=0){
          //包含了此flag
          .......
        }else {
          //未包含
          .......
        }
flag添加

对于flag我们的使用方式有两种
一种为直接在 applicatio 标签下添加需要的flag标识

<application
		.....
 		android:allowBackup="true" 		  //对应FLAG_ALLOW_BACKUP
        android:protectionLevel="system"  //对应FLAG_SYSTEM
        android:testOnly="true">		  //对应FLAG_TEST_ONLY
        ........
</application>

另一种可以通过获取到ApplicationInfo中的flags在代码里通过或为运算添加

        getApplicationInfo().flags=getApplicationInfo().flags| ApplicationInfo.FLAG_TEST_ONLY;

ApplicationInfo中的flag 解析大全

flage名字内容描述
FLAG_SYSTEM如果设置,则此应用程序安装在设备的系统映像中1<<0
FLAG_DEBUGGABLE如果此应用程序希望允许调试其代码,则设置为 true,即使安装在非开发系统上也是如此。
application 标签android:debuggable
1<<1
FLAG_HAS_CODE如果此应用程序具有与其关联的代码,则设置为 true。 application 标签android:hasCode1<<2
FLAG_PERSISTENT如果此应用程序是持久的,则设置为 true。 application 标签android:persistent1<<3
FLAG_FACTORY_TEST如果此应用程序拥有android.Manifest.permission.FACTORY_TEST权限并且设备在工厂测试模式下运行,则设置为 true。1<<4
FLAG_ALLOW_TASK_REPARENTING默认添加,android:allowTaskReparenting,一般和TaskAffinity属性配对使用1<<5
FLAG_ALLOW_CLEAR_USER_DATA默认添加,android:allowClearUserData,用户是否能选择自行清除数据,默认为true,程序管理器包含一个选择允许用户清除数据。当为true时,用户可自己清理用户数据,反之亦然1<<6
FLAG_UPDATED_SYSTEM_APP如果此应用程序已安装为内置系统应用程序的更新,则设置此值。1<<7
FLAG_TEST_ONLYapplication 标签 android:testOnly ,标识应用仅用于测试1<<8
FLAG_SUPPORTS_SMALL_SCREENS当应用程序的窗口可以缩小以适应较小的屏幕时为真。 对应于android:smallScreens1<<9
FLAG_SUPPORTS_NORMAL_SCREENS当应用程序的窗口可以在普通屏幕上显示时为真。 对应于android:normalScreens1<<10
FLAG_SUPPORTS_LARGE_SCREENS当应用程序的窗口可以为更大的屏幕增加大小时为真。 对应于android:largeScreens1<<11
FLAG_RESIZEABLE_FOR_SCREENS当应用程序知道如何针对不同的屏幕尺寸调整其 UI 时为 true。 对应于android:resizeable1<<12
FLAG_SUPPORTS_SCREEN_DENSITIES当应用程序知道如何适应不同的屏幕密度时为真。 对应于android:anyDensity 。已弃用:以 API 4 或更高版本为目标时默认设置,应用程序不应将此设置为 false1<<13
FLAG_VM_SAFE_MODE如果此应用程序想要请求 VM 在安全模式下运行,则设置为 true。 application标签 android:vmSafeMode1<<14
FLAG_ALLOW_BACKUP如果应用程序不希望允许对其数据进行任何操作系统驱动的备份,则设置为false ; 否则为true 。application 标签android:allowBackup属性。1<<15
FLAG_KILL_AFTER_RESTORE如果应用程序必须在全系统还原操作后保留在内存中,则设置为false ; 否则为true 。 通常,在完整的系统还原操作期间,每个应用程序都会在执行其代理的 onRestore() 方法后关闭。 将此属性设置为false可防止出现这种情况。 大多数应用程序不需要设置此属性。如果android:allowBackup设置为false或未指定android:backupAgent ,则该标志将被忽略。application 标签android:killAfterRestore属性。1<<16
FLAG_RESTORE_ANY_VERSION如果应用程序的备份代理声称能够处理甚至“来自未来”的恢复数据,即来自版本代码大于设备上当前安装的版本代码的应用程序版本,则设置为true 。 谨慎使用! 默认情况下,此属性为false ,备份管理器将确保在还原操作期间永远不会提供来自应用程序“未来”版本的数据。如果android:allowBackup设置为false或未指定android:backupAgent ,则该标志将被忽略。application 标签android:restoreAnyVersion属性。1<<17
FLAG_EXTERNAL_STORAGE如果应用程序当前安装在外部/可移动/不受保护的存储上,则设置为 true。 如果当前未安装此类应用程序的存储,则此类应用程序可能不可用。 当它所在的存储不可用时,它看起来像是应用程序已被卸载(其 .apk 不再可用),但其持久数据并未删除1<<18
FLAG_SUPPORTS_XLARGE_SCREENS当应用程序的窗口可以为超大屏幕增加大小时为真。 对应于android:xlargeScreens1<<19
FLAG_LARGE_HEAP当应用程序为其进程请求大堆时为真。 对应于android:largeHeap1<<20
FLAG_STOPPED如果此应用程序的包处于停止状态,则为 true。1<<21
FLAG_SUPPORTS_RTL当应用程序愿意支持 RTL(从右到左)时为 true。 所有活动都会继承这个值。 从活动清单中的android.R.attr.supportsRtl属性设置。 默认值为 false(不支持 RTL)1<<22
FLAG_INSTALLED如果当前为调用用户安装了应用程序,则为 true。1<<23
FLAG_IS_DATA_ONLY如果应用程序只安装了它的数据,则为 true; 应用程序包本身当前不存在于设备上1<<24
FLAG_IS_GAMEflags值:如果应用程序被声明为游戏,则为 true,如果它是非游戏应用程序,则为 false。已弃用:请改用CATEGORY_GAME1<<25
FLAG_FULL_BACKUP_ONLYtrue如果应用程序要求,只有全数据流的数据进行备份,即使它定义了一个进行BackupAgent ,这通常表示该应用程序将通过增量键/值更新管理其备份数据。1<<26
FLAG_USES_CLEARTEXT_TRAFFIC如果应用程序可能使用明文网络流量(例如,HTTP 而不是 HTTPS;WebSockets 而不是 WebSockets Secure;XMPP、IMAP、STMP 没有 STARTTLS 或 TLS),则为true 。 如果为false ,则应用声明它不打算使用明文网络流量,在这种情况下,平台组件(例如,HTTP 堆栈、 DownloadManager 、 MediaPlayer )将拒绝应用使用明文流量的请求。 鼓励第三方图书馆也尊重这个标志。**注意: WebView为面向 API 级别 26 及更高级别的应用程序提供此标志。**如果存在 Android 网络安全配置,则在 Android N 及更高版本上会忽略此标志。application 标签 android:usesCleartextTraffic1<<27
FLAG_EXTRACT_NATIVE_LIBS设置安装程序从 .apk 文件中提取本机库时为true1<<28
FLAG_HARDWARE_ACCELERATED当应用程序的渲染应该是硬件加速时为true1<<29
FLAG_SUSPENDED如果此应用程序的包处于挂起状态,则为 true1<<30
FLAG_MULTIARCH如果来自此应用程序的代码需要加载到其他应用程序的进程中,则为 true。 在支持多个指令集的设备上,这意味着代码可能会加载到使用任何设备支持的指令集的进程中。系统可能会特别对待此类应用程序,例如,通过为所有支持的指令集提取应用程序的本地库或通过为所有支持的指令集编译应用程序的 dex 代码1<<31

最后

资料整理不易,如果可以,请同学们多多点赞,收藏,鼓励!!!
在这里插入图片描述

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-09-22 14:48:20  更:2021-09-22 14:49:32 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 20:21:23-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码