youtobe和youtobeGo在不同国家码下的预置

在国家码不同的情况下,预置的apk是不一样的,所以需要解决这个问题

alps/frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java

当写入过的国家码的时候,驱动会传上来一个ro值,ro值的内容是各个国家的缩写,然后再packagemanagerservice.java文件中的scanPackageInternalLI方法中返回null,
scanPackageInternalLI方法会扫描手机中的所有apk。

private PackageParser.Package scanPackageInternalLI(PackageParser.Package pkg, File scanFile,
             int policyFlags, int scanFlags, long currentTime, @Nullable UserHandle user)
             throws PackageManagerException {
             .....

 //Redmine149881 modified for youtube or youtubeGo muyuanyuan begin
                         String CountryCode = SystemProperties.get("ro.boot.name2");

                          if(TextUtils.isEmpty(CountryCode)&& pkg.packageName.equals("com.google.android.apps.youtube.mango")&& pkg.codePath.contains("system/app")){
                                 android.util.Log.e("muyuanyuan","CountryCode is null !!!!");
                         return null;
              }
         if(pkg !=null && CountryCode != null ){
                 if("AE".equals(CountryCode)||"CZ".equals(CountryCode)||"ES".equals(CountryCode)||"FR".equals(CountryCode)||"GR".equals(CountryCode)||"IL".equals                (CountryCode)||"IT".equals(CountryCode)||"PL".equals(CountryCode)||"PT".equals(CountryCode)||"RO".equals(CountryCode)||"RU".equals(CountryCode)||"SG".equals(CountryCode)||"UA".equals(CountryCode)||"DE".equals(CountryCode)){
                         if(pkg.packageName.equals("com.google.android.apps.youtube.mango")&& pkg.codePath.contains("system/app")){
                         android.util.Log.e("muyuanyuan","CountryCode---->"+CountryCode+"packageName == youtube   mango!!!");
                         return null;
                         }
                 }else if("AR".equals(CountryCode)||"BD".equals(CountryCode)||"BR".equals(CountryCode)||"CL".equals(CountryCode)||"CO".equals(CountryCode)||"IR".equals(CountryCode)||"KZ".equals(CountryCode)||"MX".equals(CountryCode)||"MY".equals(CountryCode)||"PE".equals(CountryCode)||"TH".equals(CountryCode)||"TR".equals(CountryCode)||"UY".equals(CountryCode)||"VE".equals(CountryCode)||"VN".equals(CountryCode)||"ID".equals(CountryCode)||"PH".equals(CountryCode)) {
                         if(pkg.packageName.equals("com.google.android.youtube")&& pkg.codePath.contains("system/app")){
                                 android.util.Log.e("muyuanyuan","CountryCode---->"+CountryCode+"packageName == youtube  !!!");
                                 return null;
                         }
                 }else if(pkg.packageName.equals("com.google.android.apps.youtube.mango")&& pkg.codePath.contains("system/app")){
                 android.util.Log.e("muyuanyuan","CountryCode do not have!!!!");
                 return null;
                         }
          }
 //Redmine149881 modified for youtube or youtubeGo muyuanyuan end
........
}

加上这段代码 && pkg.codePath.contains(“system/app”) 可以保证用户自己安装的YouTube可以保留。
当时就是因为没有判断apk的安装路径,所以客户反馈了下面的问题:
1.写入MY国家码,恢复出厂设置后默认显示YouTube Go版本
2.安装YouTube软件,手机重启
测试结果:重启后仅显示YouTube Go版本,YouTube被卸载
期望结果:用户自己安装的YouTube可以保留
分析apk的安装路径:通过在PmsExtImpl.java中打log,得知YouTubeGo和YouTube的安装路径。

alps/vendor/mediatek/proprietary/frameworks/base/services/core/java/com/mediatek/server/pm/PmsExtImpl.java

public boolean isVendorOperatorDir(File dir) {
         boolean ret = false;
                 Slog.d(TAG+"myy", "isVendorOperatorDir---------dir->"+dir);
         try {
         
        // dir.getCanonicalFile()->/system/app/YouTubeGo dir.getCanonicalFile().getAbsolutePath()--/system/app/YouTubeGo
         
                         Slog.d(TAG+"myy", "dir.getCanonicalFile()->"+dir.getCanonicalFile()+" dir.getCanonicalFile().getAbsolutePath()--"+dir.getCanonicalFile().getAbsolutePath()+" equalsequals==== "+dir.getCanonicalFile().getAbsolutePath().equals("/vendor/operator/app"));
                         
            ret = dir.getCanonicalFile().getAbsolutePath().contains("/system/app/");
            
            Slog.d(TAG+"myy", "ret---------ret->"+ret);
            
         } catch (IOException e) {
                         Slog.d(TAG+"myy", "IOException");
             e.printStackTrace();
         }
         return ret;
     }

    @Override
    public boolean needSkipScanning(PackageParser.Package pkg,
            PackageSetting updatedPkg, PackageSetting ps, File scanFile) {
            boolean bSkip =(isVendorOperatorDir(scanFile) && (ps == null && updatedPkg == null)&& (null != pkg));
            Slog.d(TAG+"myy", "bSkip---------bSkip->"+bSkip);
            if (bSkip){
            return true;
            }
            ......
          }

注意点:客户安装的apk是在date分区下,所以通过安装不同路径来判断,就可以解决该问题。
pkg.codePath.contains(“system/app”)

恢复出厂设置仅仅就格式化/data 分区,不会格式化/system 分区

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值