默认允许未知应用安装权限,默认点开apk文件(或特定应用)后自动安装 您所在的位置:网站首页 安卓系统安装未知应用权限管理 默认允许未知应用安装权限,默认点开apk文件(或特定应用)后自动安装

默认允许未知应用安装权限,默认点开apk文件(或特定应用)后自动安装

2023-12-23 18:19| 来源: 网络整理| 查看: 265

P版本:

默认允许未知应用安装权限

方法一框架层修改

frameworks/base/core/java/android/app/AppOpsManager.java

在sOpDefaultMode函数中

AppOpsManager.MODE_DEFAULT,  // OP_REQUEST_INSTALL_PACKAGES

改成AppOpsManager.MODE_ALLOWED

S版本是//REQUEST_INSTALL_PACKAGES,但是S上改了这个没有用,点安装包后依然会有 未知提示的安全弹窗,所以要去/PackageInstallerActivity.java改

protected void onResume() {里

checkIfAllowedAndInitiateInstall();这句直接换成

initiateInstall();

就所有应用都不检查是否允许权限了,都能安装

方法二:

S版本的是已经把安装应用封装到framework下面了frameworks/base/packages/PackageInstaller/src/com/android/packageinstaller/PackageInstallerActivity.java

P版本:

以下走的PackageInstaller,如果带了GMS包的话,可能是安装了谷歌的 GooglePackageInstaller,这个应用实测override无法消除,那就删掉mk文件

vendor/google/apps/GooglePackageInstaller/Android.mk

vendor/mediatek/proprietary/packages/apps/PackageInstaller/ src/com/android/packageinstaller/InstallStart.java

在onCreate中加入

if (callingPackage == null){         isTrustedSource = true;         }

isTrustedSource这个变量就是决定是否赋予安装权限然后执行接下来的安装,

方法一是底层修改,方法二是上层应用调用修改,实际上获得的第三方应用安装权限还是no的,只是手动改为了true

默认点开apk文件后自动安装,这个的前提是把上面未知应用安装权限打开

vendor/mediatek/proprietary/packages/apps/PackageInstaller/ src/com/android/packageinstaller/PackageInstallerActivity.java

在初始安装的方法initiateInstall里 加入

if(true/*pkgName.equals("com.veclink.vecsipsimple")*/)             startInstall();

这个判断就可以指定特定包名,因为在函数开始就已经获取了当前包名

String pkgName = mPkgInfo.packageName;

如果还没有开启第三方应用安装权限的话(AppOpsManager.java中未改),也可以在这个文件的onCreate方法中加入

if (mCallingPackage == null) {             initiateInstall();         } else         //*/         checkIfAllowedAndInitiateInstall();

,就是如果没开启权限的话,此时的mCallingPackage读不到的,为null,所以源码也直接执行checkIfAllowedAndInitiateInstall()是否允许才会安装,需要用户手动点一下授予权限

S版本

自动安装完成后,会有个完成或打开的确认界面,这个界面可以自动跳过为直接打开安装好的应用,也可以不要。实际上也不需要直接打开,如果是静默安装的话,那就会突然跳出来应用了。所以直接就默认完成,其实点完成就是直接finish当前界面

如果要修改直接打开,则

src/com/android/packageinstaller/InstallSuccess.java  这个文件就是安装成功后的逻辑

onCreate方法中

因为

boolean enabled = false;             if (launchIntent != null) {                 List list = getPackageManager().queryIntentActivities(launchIntent,                         0);                 if (list != null && list.size() > 0) {                     enabled = true;                 }             }

此时源码已赋值了enabled,那么就会进入if (enabled) {这个判断

在这里面打开按钮的点击事件完成之后launchButton.setOnClickListener之后加入

也就是

if (enabled) {             launchButton.setOnClickListener(view -> {                 try {                     startActivity(mLaunchIntent);                 } catch (ActivityNotFoundException | SecurityException e) {                     Log.e(LOG_TAG, "Could not start activity", e);                 }                 finish();             });

之后加上

launchButton.performClick();  

就可以模拟点击打开按钮了

如果想直接点完成,那就把这句话改成

finish();

一个是R.id.done_button,一个是R.id.launch_button



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有