leadcore Android4.4
1.平板开机时开机动画半屏播放,最后一帧全屏显示,关机动画正常。
原因:屏幕surfaceflinger 默认没转过来,android起来后才转。
解决:在DisplayDevice.cpp内的setProjection函数里修改
if (!frame.isValid()) {
// the destination frame can be invalid if it has never been set,
// in that case we assume the whole display frame.
if (mHardwareOrientation%2 == 1) {
frame = Rect(h, w);
} else {
frame = Rect(w, h);
}
}
if (viewport.isEmpty()) {
// viewport can be invalid if it has never been set, in that case
// we assume the whole display size.
// it's also invalid to have an empty viewport, so we handle that
// case in the same way.
if (mHardwareOrientation%2 == 1) {
viewport = Rect(h, w);
} else {
viewport = Rect(w, h);
}
备注:此方法治标不治本,不是主流方法,只能救急。
2.权限管理
通过
List<PackageInfo> listContents =
mPackageManager.getInstalledPackages(PackageManager.GET_PERMISSIONS);
获取有权限的应用,通过
permisionsStrings =mPackageManager.getPackageInfo(listContents.get(i).packageName,
PackageManager.GET_PERMISSIONS).requestedPermissions;
获取应用的权限,再对比要控制的权限。
所有权限的控制都是通过AppOpsManager来操作,最终在AppOpsService处理。AppOpsService在ActivityManagerService内构造。ServiceManager.addService是在自身的public方法内完成,此方法被ActivityManagerService调用。
权限管理是通过xml文件保存的,文件存储路径为/data/system/appops.xml,文件示例如下
<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<app-ops>
<enable value="true" />
<pkg n="root">
<uid n="0">
<op n="40" m="0" t="1409500831215" d="3007" />
</uid>
</pkg>
<pkg n="com.leadcore.amt3">
<uid n="1000">
<op n="11" m="0" t="1409500848012" />
</uid>
</pkg>
<pkg n="com.android.provision">
<uid n="1000">
<op n="23" m="0" t="1409500827414" />
</uid>
</pkg>
<pkg n="com.android.backup">
<uid n="1000">
<op n="15" m="0" />
</uid>
</pkg>
<pkg n="android">
<uid n="1000">
<op n="0" m="0" />
<op n="3" m="0" t="1409500824459" d="29" />
<op n="11" m="0" t="1409500826612" />
<op n="23" m="0" t="1409500868532" />
<op n="40" m="0" t="1409509828551" d="27" />
<op n="41" m="0" t="1409500831625" d="9115203" />
</app-ops>
enable代表是否启用权限管理,leadcore新增
pkg代表一个程序管理的开始,属性n代表包名,
uid代表用户id,root用户id为0,
op代表权限设置,属性n代表权限代码,m代表权限模式(mode),0表示允许,1表示禁止,其他值(3)与没有设置都代表 总是询问。t表示时间,d表示Duration,r表示RejectTime。
3.hasSystemFeature
PackageManager的hasSystemFeature方法最终通过aidl调用到PackageManagerService.java里面
public boolean hasSystemFeature(String name) {
synchronized (mPackages) {
return mAvailableFeatures.containsKey(name);
}
}
mAvailableFeatures保存了xml中解析出来以feature为标签的。xml文件保存于system/etc/permissions目录下。这些文件为直接从frameworks/native/data/etc/复制过去的。
4.
<string name="master_clear_summary" product="tablet" msgid="4036344100254678429">"清除平板电脑上的所有数据"</string>
<string name="master_clear_summary" product="default" msgid="4986154238001088492">"清除手机上的所有数据"</string>