1.定位代码与调试
Hierarchy Viewer分析界面工具,uiautomatorviewer自动化查看器,定位组件。添加调试信息,调试定位代码
2.搜索获取apk文件图标
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
public static Drawable getApkIcon(Context context, String apkPath) {
PackageManager pm = context.getPackageManager();
PackageInfo info = pm.getPackageArchiveInfo(apkPath,
PackageManager.GET_ACTIVITIES);
if (info != null) {
ApplicationInfo appInfo = info.applicationInfo;
appInfo.sourceDir = apkPath;
appInfo.publicSourceDir = apkPath;
try {
return appInfo.loadIcon(pm);
} catch (OutOfMemoryError e) {
Log.e("ApkIconLoader", e.toString());
}
}
return null;
}
3.新建app验证方案
提示错误:
(1)查看开源代码AnExplorer,采用该方案与上述不同。调试发现info为空。
(2)pm.getPackageArchiveInfo没有获取到PackageInfo对象,可能是路径错误。查看方法,打印路径。
(3)api错误,修改api源码添加log日志,发现google极客文件使用该api。
(4)权限问题,添加storage权限,并且开启storage授权。
4.添加权限
PackageInfo mPkgInfo = pm.getPackageInfo(packageUri,
PackageManager.GET_PERMISSIONS
| PackageManager.MATCH_UNINSTALLED_PACKAGES);
if(mPkgInfo != null){
return pm.getApplicationIcon(mPkgInfo.applicationInfo);
}else {android.util.Log.e("zmc","packageInfo is null");}
android 默认apk添加权限
frameworks\base\services\core\java\com\android\server\pm\DefaultPermissionGrantPolicy.java
private static final Set<String> STORAGE_PERMISSIONS = new ArraySet<>();
static {
STORAGE_PERMISSIONS.add(Manifest.permission.READ_EXTERNAL_STORAGE);
STORAGE_PERMISSIONS.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);
STORAGE_PERMISSIONS.add(Manifest.permission.ACCESS_MEDIA_LOCATION);
}
grantDefaultSystemHandlerPermissions(int userId){
//默认apk权限添加 -> grantRuntimePermissionsLPw
grantPermissionsToSystemPackage("com.android.documentsui",userId,STORAGE_PERMISSIONS);
在代码中添加权限,会造成gms-gts不过,alps/frameworks/base/data/etc/com.android.documentsui.xml下添加权限
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)