RK3568-Android12 关于去掉安装apk时提示“来历不明的。。。”和“出于安全。。。”的修改方法

  在Android上安装apk往往有多种方式,但对于一般的操作来说有两种:1,通过U盘点击安装;2,通过网站、应用市场安装。

       第一种安装方式会提示:“来历不明的应用会损坏。。。”,点击继续安装,才能进行下一步操作。

       第二种安装方式会提示:“出于安全。。。”,需要在设置->应用 把对应的应用的未知来源应用设置为允许,才能继续安装。

       跟踪安装Apk时的logcat输出,发现上面所描述的弹窗处理的代码在:frameworks/base/packages/PackageInstaller/src/com/android/packageinstaller/PackageInstallerActivity.java

主要触发函数如下图

  1. 第一情况是由于此次安装没有发起方,引起了DLG_ANONYMOUS_SOURCE,继续深入解读代码,发现下一步仅仅是提示弹窗,并根据客户操作来确定是否继续安装,改法就比较简单,不弹窗直接安装即可。

+++ b/packages/PackageInstaller/src/com/android/packageinstaller/PackageInstallerActivity.ja
va
@@ -196,7 +196,10 @@ public class PackageInstallerActivity extends AlertActivity {
             case DLG_EXTERNAL_SOURCE_BLOCKED:
                 return ExternalSourcesBlockedDialog.newInstance(mOriginatingPackage);
             case DLG_ANONYMOUS_SOURCE:
-                return AnonymousSourceDialog.newInstance();
+                //return AnonymousSourceDialog.newInstance();
+                mAllowUnknownSources = true;
+                initiateInstall();
+                break;
         }
         return null;
     }
  1. 第二种情况是由于安装发起方没有打开允许权限(可在 设置->应用 中的对应应用查看)导致的ExternalSourcesBlockedDialog,继续往下看代码流程,弹窗提示 “出于安全考虑,目前已禁止您的平板电脑安装来自此来源的未知应用。您可以在“设置”中对此进行更改。”,点击确定的话,会通过(ACTION_MANAGE_UNKNOWN_APP_SOURCES = "android.settings.MANAGE_UNKNOWN_APP_SOURCES")打开权限设置界面(packages/apps/Settings/AndroidManifest.xml 中关联内容如下图,有兴趣可以去研究代码)。

   这种情况的改法也比较粗暴,无非就是自动赋予允许权限,直接上代码(参考packages/apps/Settings 中打开允许权限):

@@ -514,10 +517,29 @@ public class PackageInstallerActivity extends AlertActivity {
         // Shouldn't use static constant directly, see b/65534401.
         final int appOpCode =
                 AppOpsManager.permissionToOpCode(Manifest.permission.REQUEST_INSTALL_PACKAGES);
-        final int appOpMode = mAppOpsManager.noteOpNoThrow(appOpCode, mOriginatingUid,
+        int appOpMode = mAppOpsManager.noteOpNoThrow(appOpCode, mOriginatingUid,
                 mOriginatingPackage, mCallingAttributionTag,
                 "Started package installation activity");
         if (mLocalLOGV) Log.i(TAG, "handleUnknownSources(): appMode=" + appOpMode);
+
+        if(AppOpsManager.MODE_ALLOWED != appOpMode){
+            try {
+                PackageManager mPm = this.getPackageManager();
+                PackageInfo mPackageInfo = mPm.getPackageInfo(mOriginatingPackage,
+                    PackageManager.MATCH_DISABLED_COMPONENTS |
+                    PackageManager.MATCH_ANY_USER |
+                    PackageManager.GET_SIGNATURES |
+                    PackageManager.GET_PERMISSIONS);
+                mAppOpsManager.setMode(AppOpsManager.OP_REQUEST_INSTALL_PACKAGES,
+                mPackageInfo.applicationInfo.uid, mOriginatingPackage, AppOpsManager.MODE_ALLOWED);
+            } catch(NameNotFoundException e) {
+                Log.e(TAG, "Exception:" + e);
+            }
+        }
+
+       appOpMode = mAppOpsManager.noteOpNoThrow(appOpCode, mOriginatingUid,
+                mOriginatingPackage, mCallingAttributionTag,
+                "Started package installation activity");
         switch (appOpMode) {
             case AppOpsManager.MODE_DEFAULT:
                 mAppOpsManager.setMode(appOpCode, mOriginatingUid,
~

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: roc-rk3568-pc是一款基于RK3568芯片的台式电脑板,它能够提供高性能、低功耗、多媒体处理以及AI加速等特性。roc-rk3568-pc实现了PC级性能和功能,可以运行Linux和Android操作系统,同支持多种显示接口和存储接口。 例如,roc-rk3568-pc支持双频WiFi和蓝牙,可以通过HDMI、DP、VGA等接口连接显示器,还可以使用USB3.0、SATA、NVMe等接口连接存储设备。此外,roc-rk3568-pc还配备了四个USB 2.0接口、两个USB 3.0接口、一个千兆网口、一个SPI Flash等。 对于开发者和爱好者来说,roc-rk3568-pc提供了完整的软件开发包(SDK),包括操作系统、编译器、驱动程序、应用程序等。同,roc-rk3568-pc还有丰富的软件生态系统和社区支持,大大降低了开发门槛和开发成本。 总之,roc-rk3568-pc是一款高性能、全功能、易开发的台式电脑板,适用于各种应用场景,例如家庭娱乐、远程办公、物联网等。 ### 回答2: ROC-RK3568-PC例程是一个基于ROC-RK3568平台设计的针对PC设备的系统应用程序。该例程主要提供了一个使用ROC-RK3568平台的PC设备的示例,用户可通过该例程学习ROC-RK3568平台的基本应用,相应的硬件配置和软件编程技术。 针对ROC-RK3568-PC例程,用户需要掌握一定的嵌入式系统开发技术。首先,用户需要了解ROC-RK3568平台的基本知识,并安装相应的开发环境和编译器。在编写程序的过程中,用户需要熟悉C/C++语言和Linux操作系统,同掌握设备驱动和应用程序的编写方法,用于实现安装、媒体播放、网络通信、GUI开发等功能。 ROC-RK3568-PC例程的主要任务是提供一个基本的嵌入式系统应用程序示例,让开发者通过学习和修改代码,快速掌握ROC-RK3568平台的开发和应用。该例程的编写需要开发者对ROC-RK3568平台熟悉到一定程度,需要有一定的软件编码能力和嵌入式系统设计经验。同,用户还需要具备较好的沟通能力和团队协作能力,与其他成员共同完成开发任务。 总的来说,ROC-RK3568-PC例程是一个有实际应用价值的例程,对于想要深入了解嵌入式系统开发的开发者,学习和掌握该例程的编写技术是非常有益的。 ### 回答3: ROC-RK3568-PC例程是指基于ROC-RK3568芯片的PC开发板的样例程序。ROC-RK3568是一款高性能的处理器芯片,可以广泛应用于智能家居、工业控制、远程监控等领域。ROC-RK3568-PC是采用该芯片设计的一款开发板,可以为开发者提供丰富的硬件接口,并支持多种操作系统,如Ubuntu、Android等。 ROC-RK3568-PC例程提供了各种各样的代码示例和应用程序,可以帮助开发者更好地理解和使用ROC-RK3568芯片,实现自己的应用程序。例如,样例程序包括了基于Qt的UI界面设计、GPIO控制、I2C读写、串口通信、网络通信、摄像头采集等功能。此外,还提供了蓝牙配对、TCP/IP通信、远程控制等应用程序,可以帮助开发者快速搭建自己的应用系统。 对于需要使用ROC-RK3568芯片进行开发的开发者来说,ROC-RK3568-PC例程是一个非常有用的参考,可以加快开发进度,提高开发效率。自定义应用程序,只需要根据自己的需求进行修改或者扩展即可。ROC-RK3568-PC例程提供了良好的参考和基础,为开发者快速实现自己所需的功能提供了便利。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值