我在这里仅仅是禁止 手机/平板 安装APK,没有禁止adb命令。
参照上面文章
2、packageInstaller的修改
最开始以为是framework/base/service里面的packageInstaller。
改了之后发现没有成功,后面才反应过来是packages/apps/PackageInstaller这个apk
因为android9点击安装包后,在右下角有安装、取消按钮,所以定位到安装按钮就行了
代码:
packages/apps/PackageInstaller/src/com/android/packageinstaller/PackageInstallerActivity.java
public void onClick(View v) {
if (v == mOk) {
if (mOk.isEnabled()) {
if (mOkCanInstall || mScrollView == null) {
if (mSessionId != -1) {
mInstaller.setPermissionsResult(mSessionId, true);
finish();
} else {
//String installerPackageName = getIntent().getStringExtra(Intent.EXTRA_INSTALLER_PACKAGE_NAME); 为null
String installerPackageName = mPkgInfo.packageName;
if(!installerPackageName.equals("com.screson.dzbl")){
//Toast xxxx
Toast.makeText(PackageInstallerActivity.this,"禁止安装未允许的apk",Toast.LENGTH_SHORT).show();
// Cancel and finish
setResult(RESULT_CANCELED);
if (mSessionId != -1) {
mInstaller.setPermissionsResult(mSessionId, false);
}
finish();
return;
}
startInstall();
}
} else {
mScrollView.pageScroll(View.FOCUS_DOWN);
}
}
} else if (v == mCancel) {
// Cancel and finish
setResult(RESULT_CANCELED);
if (mSessionId != -1) {
mInstaller.setPermissionsResult(mSessionId, false);
}
finish();
}
}
//String installerPackageName = getIntent().getStringExtra(Intent.EXTRA_INSTALLER_PACKAGE_NAME); 为null
String installerPackageName = mPkgInfo.packageName;
if(!installerPackageName.equals("com.screson.dzbl")){
//Toast xxxx
Toast.makeText(PackageInstallerActivity.this,"禁止安装未允许的apk",Toast.LENGTH_SHORT).show();
// Cancel and finish
setResult(RESULT_CANCELED);
if (mSessionId != -1) {
mInstaller.setPermissionsResult(mSessionId, false);
}
finish();
return;
}
这一部分是新添加的,主要就是匹配包名,然后弹TOAST,并且取消安装,取消安装的代码是复制的下面取消按钮的代码。
然后
mmm packages/apps/PackageInstaller/
adb install '/home/ubuntu/桌面/data0/aosp9/out/target/product/generic_x86_64/system/priv-app/PackageInstaller/PackageInstaller.apk'
要弹Toast的话别忘了添加
import android.widget.Toast;