【CTA认证】Android CTA禁止安装第三方应用

文章描述了对Android系统源代码的修改,以阻止第三方应用的安装,除非是特定的应用包名。修改涉及到PackageInstallerActivity和PackageManagerService类,增加了检查安装包来源的逻辑,如果非指定应用则禁止安装,并显示相应提示。
摘要由CSDN通过智能技术生成


Android CTA禁止安装第三方应用

不支持安装第三方应用

手动安装只能安装特定应用
packages

diff --git a/apps/PackageInstaller/src/com/android/packageinstaller/PackageInstallerActivity.java b/apps/PackageInstaller/src/com/android/packageinstaller/PackageInstallerActivity.java
index a44167f2..b73b1eff 100755
--- a/apps/PackageInstaller/src/com/android/packageinstaller/PackageInstallerActivity.java
+++ b/apps/PackageInstaller/src/com/android/packageinstaller/PackageInstallerActivity.java
@@ -60,6 +60,7 @@ import android.widget.TextView;
 import android.database.Cursor;
 import android.provider.MediaStore;
 import android.provider.MediaStore.Files;
+import android.widget.Toast;
 
 import com.android.packageinstaller.permission.ui.OverlayTouchActivity;
 
@@ -639,7 +640,20 @@ public class PackageInstallerActivity extends OverlayTouchActivity implements On
                         mInstaller.setPermissionsResult(mSessionId, true);
                         finish();
                     } else {
-                        startInstall();
+                        String installerPackageName = mPkgInfo.packageName;
+                        if(!installerPackageName.equals("com.xxx")){
+                            //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;
+                        } else {
+                            startInstall();
+                        }
                     }
                 } else {
                     mScrollView.pageScroll(View.FOCUS_DOWN);

frameworks

diff --git a/base/services/core/java/com/android/server/pm/PackageManagerService.java b/base/services/core/java/com/android/server/pm/PackageManagerService.java
index d542ca63..238a70f6 100644
--- a/base/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/base/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -816,6 +816,9 @@ public class PackageManagerService extends PackageManagerServiceExAbs
     @GuardedBy("mPackages")
     final SparseArray<Map<String, Integer>> mChangedPackagesSequenceNumbers = new SparseArray<>();
 
+    //禁止第三方应用安装的标志
+    private boolean APK_INSTALL_FINISH = SystemProperties.getBoolean("persist.sys.horion.apk.install", false);
+
     class PackageParserCallback implements PackageParser.Callback {
         @Override public final boolean hasFeature(String feature) {
             return PackageManagerService.this.hasSystemFeature(feature, 0);
@@ -1495,6 +1498,10 @@ public class PackageManagerService extends PackageManagerServiceExAbs
         void doHandleMessage(Message msg) {
             switch (msg.what) {
                 case INIT_COPY: {
+                    if (APK_INSTALL_FINISH) {
+                        // 禁止ADB或第三方商店下载安装
+                        return ;
+                    }
                     HandlerParams params = (HandlerParams) msg.obj;
                     int idx = mPendingInstalls.size();
                     if (DEBUG_INSTALL) Slog.i(TAG, "init_copy idx=" + idx + ": " + params);
@@ -2983,6 +2990,9 @@ public class PackageManagerService extends PackageManagerServiceExAbs
                     + ((SystemClock.uptimeMillis()-startTime)/1000f)
                     + " seconds");
 
+            // 禁止ADB或第三方商店下载安装
+            APK_INSTALL_FINISH = true;
+
             // If the platform SDK has changed since the last time we booted,
             // we need to re-grant app permission to catch any new ones that
             // appear.  This is really a hack, and means that apps can in some

如果是能支持特定应用的安装,则上面不要改,要改成这样

private void installPackageLI(InstallArgs args, PackageInstalledInfo res) {
.......
        Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "parsePackage");
        final PackageParser.Package pkg;
        try {
            /* SPRD: add log for debug @{ */
            if (DEBUG) Log.d(TAG, "pms install : parsePackage start");
            /* @} */
            pkg = pp.parsePackage(tmpPackageFile, parseFlags);
            /* SPRD: add log for debug @{ */
            if (DEBUG) Log.d(TAG, "pms install : parsePackage end");
            /* @} */
        } catch (PackageParserException e) {
            res.setError("Failed parse during installPackageLI", e);
            return;
        } finally {
            Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER);
        }
        
        // 代码加在这里cta disable install unknown apk
        if (!pkg.packageName.equals("com.xx.xx")Log.e(TAG, "disable install apk");
            res.setError(INSTALL_FAILED_INVALID_APK, "disable install");
            return;
        }
        // 代码到这结束


        // Instant apps must have target SDK >= O and have targetSanboxVersion >= 2
        if (instantApp && pkg.applicationInfo.targetSdkVersion <= Build.VERSION_CODES.N_MR1) {
        .......
}

获得 CTA 认证有诸多好处,主要体现在以下几个方面:

对企业的好处:

  1. 提升产品市场竞争力:
    CTA 认证是产品符合国家相关标准和技术规范的有力证明。在市场上,消费者往往更倾向于选择经过认证的产品,认为其质量、安全性和可靠性更有保障。例如,一款获得 CTA 认证的手机,消费者会更放心购买,从而增加产品的市场份额,提高企业的竞争力。
    增加产品可信度与品牌形象:认证标志是产品质量的象征,能够增强消费者对企业和产品的信任。企业通过展示 CTA 认证标志,向消费者传递出其对产品质量的重视和承诺,有助于树立良好的品牌形象,提升品牌知名度和美誉度。
  2. 助力企业拓展市场:
    在一些行业,如电信、电子等,CTA 认证是产品进入市场的必要条件。获得认证后,企业的产品才能合法地在国内市场销售和使用,为企业拓展市场提供了基础保障。同时,也有助于企业将产品推向国际市场,因为部分国际市场也认可 CTA 认证,或者 CTA 认证可以为企业获得其他国际认证提供有力支持 。
  3. 促进企业技术升级:
    为了通过 CTA 认证,企业需要对产品的设计、生产、检测等环节进行严格把控,这就促使企业不断改进技术、优化生产流程,提高自身的技术水平和创新能力,以满足认证标准的要求。
  4. 减少贸易风险与成本:
    对于企业的贸易伙伴来说,CTA 认证可以减少对产品质量和合规性的担忧,降低贸易风险。双方在交易过程中可以减少对产品的重复检测和评估等环节,节省时间和成本 。

对消费者的好处:

  1. 保障消费者权益:CTA 认证要求产品经过严格的测试和评估,确保在正常使用中不会对用户造成安全风险,如防止电池爆炸、电路故障、电击等问题。消费者购买获得 CTA 认证的产品,使用起来更加安全、放心。
  2. 提供可靠的产品选择:面对市场上众多的产品,消费者往往难以判断其质量和性能。CTA 认证为消费者提供了一个明确的参考标准,帮助消费者筛选出符合质量要求的产品,降低了购买到低质量或不合格产品的风险。
  3. 确保产品兼容性和稳定性:经过 CTA 认证的产品,在电磁兼容性、无线电频率等方面符合国家标准,能够与其他设备和系统良好兼容,并且在使用过程中更加稳定可靠,不会出现频繁的故障或异常情况,为消费者带来更好的使用体验。

对行业发展的好处:

  1. 规范行业秩序:CTA 认证设定了统一的标准和规范,对进入市场的产品进行严格筛选。这有助于淘汰那些不符合要求的低质量、假冒伪劣产品,减少市场上的不良竞争,规范行业秩序,营造健康的市场环境。
  2. 推动行业技术进步:企业为了获得 CTA 认证,需要不断进行技术创新和改进,这将推动整个行业的技术水平不断提升。同时,认证过程中积累的技术经验和数据,也可以为行业的发展提供参考和借鉴,促进整个行业的技术进步。
  3. 促进产业协同发展:CTA 认证要求产品在各个方面都符合标准,这就促使产业链上的各个环节,如原材料供应商、零部件制造商、整机生产商等,加强协作和沟通,共同确保产品质量。从而有利于整个产业的协同发展,提高产业的整体效率和竞争力。

作者:帅得不敢出门 谢绝转载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值