此文章是vip文章,如何查看?  

1,点击链接获取密钥 http://nicethemes.cn/product/view29882.html

2,在下方输入文章查看密钥即可立即查看当前vip文章


Android源码环境应用开发知识点

  • 时间:
  • 浏览:
  • 来源:互联网

隐藏API(hidden api)怎么对应

	ApplicationInfo.java
    private boolean isAllowedToUseHiddenApis() {
    //platform签名豁免
        if (isSignedWithPlatformKey()) {
            return true;
      //SystemApp(/system/pri-app;/system/app;/product/pri-app;/product/app都是)
      //isUpdatedSystemApp表示systemApp通过install进行了更新的App
        } else if (isSystemApp() || isUpdatedSystemApp()) {
        //是否在白名单里
            return usesNonSdkApi() || isPackageWhitelistedForHiddenApis();
        } else {
            return false;
        }
    }

综上,第三方应用由于不是system应用所以不豁免,系统应用(指位于系统分区或者product分区的应用)如果是在白名单中的豁免。
添加白名单两种方式:1.白名单中添加,可参考我另一篇文章。2.AndroidManifest中指定 android:usesNonSdkApi=“true”。
当然源码编译需要指定LOCAL_PRIVATE_PLATFORM_APIS:=true才能编过,但这个命令只是编过,如果不是platform签名仍然需要添加白名单。

pri-app和app目录下的应用的不同点

pri-app是指定了privileged:true的应用(此处举例bp方式指定),也即特权应用,通过添加特权白名单能够获取系统特权,即privileged类型的权限。app目录下的应用不能通过这种方式获取特权。两种应用的isSystemApp都返回true。

android:sharedUserId意义

通过指定这个属性可以让多个包共享同一个userId,所以权限会共享。通过白名单获取的特权也能够共享,所以白名单声明一次即可。

本文链接http://element-ui.cn/news/show-20551.aspx