1.特殊需求,预置在data/app下面的apk不可以通过用户界面来卸载
方法:
1.修改frameworks/base/core/java/android/app/ApplicationPackageManager.java
1) 添加如下代码
//can't uninstall apk that is located at /data/app/
public boolean canUninstall(String pkg, IPackageDeleteObserver observer){
String apps = SystemProperties.get("persist.sys.sysapp", null);
if(apps == null){
return true;
}
Log.v(TAG, "the app list can't be uninstalled ==>:"+apps);
for(String pkgname:apps.split(",")){
if(pkgname != null && pkgname.trim().equals(pkg)){
try {
observer.packageDeleted(pkgname, PackageManager.DELETE_FAILED_INTERNAL_ERROR);
} catch (RemoteException e) {
e.printStackTrace();
}
return false;
}
}
return true;
} 通过读取系统属性中设置的apk的packagename来限制卸载apk。例如setprop persist.sys.sysapp "package1, package2" 则package1和package2包名的apk不可被卸载掉
2)修改原生如下接口:
@Override
public void deletePackage(String packageName, IPackageDeleteObserver observer, int flags) {
try {
if(!canUninstall(packageName, observer)){
return;
}
mPM.deletePackage(packageName, observer, flags);
} catch (RemoteException e) {
// Should never happen!
}
}
本文介绍了一种方法,通过修改系统属性限制特定APK(位于/data/app目录下的apk)无法通过用户界面卸载。具体实现包括修改ApplicationPackageManager.java文件,添加检查系统属性的逻辑,并重写deletePackage方法来阻止指定包名的APK卸载。
989

被折叠的 条评论
为什么被折叠?



