MTK-Android13-包安装器PackageInstaller 静默安装实现

目的

  • 我们最终是为了搞明白安装的整个流程。一方面通过安卓系统自带的包安装器来了解PMS 安装流程;另一方面熟悉框架层Framework 针对Android apk 安装流程。

前两篇文章分析了PackagerInstaller 安装流程。 Android13-包安装器PackageInstaller-之apk安装跳转
Android13-包安装器PackageInstaller-之apk安装流程
后面空了再分析框架层PMS的处理以及在框架层面的少许拦截和加功能。

  • 实现需求定制:静默安装-安装界面定制-安装拦截验证。【核心目的】

安装流程和PMS了解不用多说了; 安装定制相关:

  • 手机上安装时候弹出锁屏界面需要输入密码;
  • 安装时候弹出密码框,让用户输入定制的特殊密码功能;
  • 安装页面客制化需求

安装方式

当然正常的安装分为类型我其实理解为大概3种

  • 无界面安装:PMS启动阶段 比如系统第一次启动,所有内置app自动批量安装;我们重试系统app开发时候,或者内置系统apk开发时候,删除对应的目录下的apk和apk对应的/data/分区下的apk所有安装信息后,push
    更新的apk到系统,重启。 apk 自动重新安装。

  • adb 安装: adb 命令安装,通过adb install 安装,依托守护进程来实现安装

  • 点击安装或者调用方法安装:应用市场再下载完apk后自动进入进入包管理器进行安装;sd开或者外部存储中的安装包点击安装自动进入包管理器进行安装

相关资料推荐;

PackageInstaller的初始化

PackageInstaller安装APK

PMS处理APK的安装

PMS的创建过程
APK 安装流程

安装过程 界面跳转
Apk的安装过程探究
Android11.0系统中实现静默安装并启动App以及静默卸载

静默安装实现

修改文件

添加文件:

frameworks/base/packages/PackageInstaller/src/com/android/packageinstaller/SilenceInstallReceiver.java
frameworks/base/packages/PackageInstaller/src/com/android/packageinstaller/SilenceInstallManager.java

修改文件:

frameworks/base/packages/PackageInstaller/src/com/android/packageinstaller/UninstallerActivity.java frameworks/base/packages/PackageInstaller/src/com/android/packageinstaller/PackageInstallerApplication.java
frameworks/base/packages/PackageInstaller/src/com/android/packageinstaller/InstallStart.java
frameworks/base/packages/PackageInstaller/AndroidManifest.xml
frameworks/base/services/core/java/com/android/server/wm/ActivityStarter.java

实现思路

按照前两篇PackageInstaller 包管理器 了解的安装流程和思路,实现方案总结以下两点:

  • 延用现有的所有PackagerInstaller 逻辑,在判断安装地方 一路静默,默认同意。【弊端 涉及到多个Activity,特别是安装流程,等待都是花时间的,造成界面App假死】
  • 将所有的安装逻辑放到第一个InstallStart Activity里面,对Activity实现,在Activity 里面进行异步处理,同时对Activity进行返回后台。 【不要影响界面上面正在操作的App】
  • 在跳转到InstallStart Activity后,跳转到Service 里面处理,结束当前Activity 即可,这样安装逻辑就在Service 里面了。

实现具体方案

这里列举在 InstallStart Activity 里面进行逻辑处理,作为一个方案的引入。 实际项目中直接在Service里面处理的。

SilenceInstallReceiver

新增的一个安装成功监听、通知显示提示,根据自身需要是否需要,进行定制或直接删除。


public class PackageInstalledReceiver extends BroadcastReceiver {
    private static final String TAG = PackageInstalledReceiver.class.getSimpleName();

    private static final boolean DEBUG = false;

    @Override
    public void onReceive(Context context, Intent intent) {
        if (Settings.Global.getInt(context.getContentResolver(),
                Settings.Global.SHOW_NEW_APP_INSTALLED_NOTIFICATION_ENABLED, 0) == 0) {
            return;
        }

        String action = intent.getAction();

        if (DEBUG) {
            Log.i(TAG, "Received action: " + action);
        }

        if (Intent.ACTION_PACKAGE_ADDED.equals(action)) {
            Uri packageUri = intent.getData();
            if (packageUri == null) {
                return;
            }

            String packageName = packageUri.getSchemeSpecificPart();
            if (packageName == null) {
                Log.e(TAG, "No package name");
                return;
            }

            if (intent.getBooleanExtra(Intent.EXTRA_REPLACING, false)) {
                if (DEBUG) {
                    Log.i(TAG, "Not new app, skip it: " + packageName);
                }
                return;
            }

            // TODO: Make sure the installer information here is accurate
            String installer =
                    context.getPackageManager().getInstallerPackageName(packageName);
            new PackageInstalledNotificationUtils(context, installer,
                    packageName).postAppInstalledNotification();
        }
    }
}	
   

SilenceInstallManager

静默安装的核心工具类,做了以下几个工作,针对PackageInstall 安装流程进行了一个提取
  • copy 文件,安装包文件拷贝
  • session 的创建、注册回调、交互,安装工作提交到Framework层 commit 、registerSessionCallback(mSessionCallback)
  • 这里封装了静默安装和卸载的方法

PackageInstallerApplication.java

Application 中初始化工具类
	SilenceInstallManager.getInstance(this);

UninstallerActivity.java

静默卸载方案实现,调用工具类方法

 onCreate 方法中 
 if (intent.getBooleanExtra(SilenceInstallReceiver.SILENCE_INSTALL_KEY, false)) {
			 Log.d(TAG, "silenceUninstall ....");
            SilenceInstallManager.getInstance(this).silenceUninstall(mPackageName);
            return;
 }
	

InstallStart

内部创建一个异步线程

   // if silence install  ->to silence install 
        if (intent.getBooleanExtra(SilenceInstallReceiver.SILENCE_INSTALL_KEY, false)) {
			Log.d(TAG," StagingAsyncAppTask  to  execute ");
            StagingAsyncAppTask mStagingTask = new StagingAsyncAppTask(intent.getBooleanExtra(SilenceInstallReceiver.IS_LAUNCH_KEY, false));
            mStagingTask.execute(getIntent().getData());
			
            return;
        }

异步线程作什么呢?

  • 拷贝文件
  • 创建uri,发送广播 通知
@SuppressLint("NewApi")
    private final class StagingAsyncAppTask extends AsyncTask<Uri, Void, File> {

        private boolean mIsLaunch;

        public StagingAsyncAppTask(boolean isLaunch){
            mIsLaunch = isLaunch;
        }


        @Override
        protected File doInBackground(Uri... params) {
            Log.d(LOG_TAG, "copy file from user app start");
            if (params == null || params.length <= 0) {
                return null;
            }
            Uri packageUri = params[0];
            try (InputStream in = getContentResolver().openInputStream(packageUri)) {
                // Despite the comments in ContentResolver#openInputStream the returned stream can
                // be null.
                if (in == null) {
                    return null;
                }

                File mStagedFile = TemporaryFileManager.getStagedFile(InstallStart.this);

                try (OutputStream out = new FileOutputStream(mStagedFile)) {
                    byte[] buffer = new byte[1024 * 1024];
                    int bytesRead;
                    while ((bytesRead = in.read(buffer)) >= 0) {
                        // Be nice and respond to a cancellation
                        out.write(buffer, 0, bytesRead);
                    }
                }
                return mStagedFile;
            } catch (IOException | SecurityException | IllegalStateException e) {
                Log.w(LOG_TAG, "Error staging apk from content URI", e);
            }
            return null;
        }

        @Override
        protected void onPostExecute(File installFile) {
            if (null != installFile) {
                // Now start the installation again from a file
                Log.d(LOG_TAG, "copy file from user app finish");

                Intent installIntent = new Intent(SilenceInstallReceiver.SILENCE_INSTALL_APP);
                installIntent.putExtra(SilenceInstallReceiver.APP_URI_KEY, Uri.fromFile(installFile));
                installIntent.putExtra(SilenceInstallReceiver.IS_LAUNCH_KEY, mIsLaunch);
                installIntent.addFlags(Intent.FLAG_RECEIVER_INCLUDE_BACKGROUND);
                installIntent.setPackage("com.android.packageinstaller");
                sendBroadcast(installIntent);

                Log.d(LOG_TAG, "send to install");
            } else {
                Log.d(LOG_TAG, "copy file from user app fail");
            }

            finish();
        }
    }  
   

测试验证

这里写了一个简单的方法,直接验证功能

 private fun installTest() {
        // val appPath ="/sdcard/aiqiyi.apk"       // getExternalFilesDir(null)!!.absolutePath + File.separator + "aiqiyi.apk"
        //val appPath =getExternalFilesDir(null)!!.absolutePath + File.separator + "aiqiyi.apk"
       // val appPath ="/data/data/com.deling.launcher/files" + File.separator + "aiqiyi.apk"
        val aPath ="/data/data/com.deling.launcher/files" + File.separator + "aiqiyi.apk"
		
        Log.d(TAG," aPath path:"+aPath);
        val appFile = File(aPath)
        if (!appFile.exists()) {
            //showToast("请在" + getExternalFilesDir(null)!!.absolutePath + File.separator + "目录中放置升级文件")
            ToastUtils.showShort("请 配置文件")
            return
        }


        //大于7.0使用此方法
        val apkUri = FileProvider.getUriForFile(
            ContextProvider.get().context,
            "com.deling.launcher.fileProvider",
            appFile
        )  

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            val installApkIntent = Intent()
            installApkIntent.setAction(Intent.ACTION_VIEW)
            installApkIntent.addCategory(Intent.CATEGORY_DEFAULT)
            installApkIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
            installApkIntent.setDataAndType(apkUri, "application/vnd.android.package-archive")
            installApkIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
            //设置静默安装标识
            installApkIntent.putExtra("silence_install", true)
            //设置安装完成是否启动标识
            installApkIntent.putExtra("is_launch", true)
            //设置后台中启动activity标识
            installApkIntent.putExtra("allowed_Background", true)
            if (packageManager.queryIntentActivities(installApkIntent, 0).size > 0) {
                startActivity(installApkIntent)
            }
        }
    }

分析:
这里写了传递了三个参数

  • silence_install 是否静默安装
  • is_launch 安装成功后是否启动起来
  • 是否允许在后台运行,这样保证不影响实际界面显示使用

测试结果跳转到了这个界面,说明所有流程都是走通了的,功能可行:
在这里插入图片描述

日志参考

部分日志参考如下,打印。可以结合实际日志参考流程

  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.54425627
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.54425627
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.55876976
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.55876976
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.55876976
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.55876976
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.55876976
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.55876976
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.57328326
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.57328326
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.57328326
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.57328326
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.57328326
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.57328326
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.58779675
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.58779675
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.58779675
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.58779675
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.58779675
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.58779675
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.60231024
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.60231024
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.60231024
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.60231024
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.60231024
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.60231024
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.61682373
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.61682373
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.61682373
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.61682373
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.61682373
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.61682373
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.6313372
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.6313372
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.6313372
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.6313372
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.6313372
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.6313372
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.6458507
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.6458507
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.6458507
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.6458507
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.6458507
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.6458507
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.6603642
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.6603642
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.6603642
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.6603642
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.6603642
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.6603642
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.6748777
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.6748777
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.6748777
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.6748777
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.6748777
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.6748777
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.6893912
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.6893912
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.6893912
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.6893912
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.6893912
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.6893912
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.7039047
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.7039047
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.7039047
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.7039047
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.7039047
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.7039047
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.7184182
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.7184182
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.7184182
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.7184182
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.7184182
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.7184182
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.7329317
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.7329317
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.7329317
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.7329317
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.7329317
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.7329317
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.74744517
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.74744517
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.74744517
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.74744517
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.74744517
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.74744517
  AutofillManager         com.android.packageinstaller         D  Fill dialog is enabled:false, hints=[]
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.76195866
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.76195866
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.76195866
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.76195866
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.76195866
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.76195866
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.77647215
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.77647215
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.77647215
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.77647215
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.77647215
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.77647215
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.79098564
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.79098564
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.79098564
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.79098564
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.79098564
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.79098564
  InstallStart            com.android.packageinstaller         D  copy file from user app start
  SilenceInstallManager   com.android.packageinstaller         D  send install PendingIntent----->
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onActiveChanged---->800223053  active--->false
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onActiveChanged---->800223053  active--->false
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onActiveChanged---->800223053  active--->false
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onActiveChanged---->800223053  active--->false
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onActiveChanged---->800223053  active--->false
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onActiveChanged---->800223053  active--->false
  SilenceInstallManager   com.android.packageinstaller         D  onFinished---->1515810306  success--->true
  SilenceInstallManager   com.android.packageinstaller         D  onFinished---->1515810306  success--->true
  SilenceInstallManager   com.android.packageinstaller         D  onFinished---->1515810306  success--->true
  SilenceInstallManager   com.android.packageinstaller         D  onFinished---->1515810306  success--->true
  SilenceInstallManager   com.android.packageinstaller         D  onFinished---->1515810306  success--->true
  SilenceInstallManager   com.android.packageinstaller         D  install success
  SilenceInstallManager   com.android.packageinstaller         D  launch app--->
  SilenceInstallManager   com.android.packageinstaller         D  install success
  SilenceInstallManager   com.android.packageinstaller         D  install success
  SilenceInstallManager   com.android.packageinstaller         D  install success
  SilenceInstallManager   com.android.packageinstaller         D  install success
  SilenceInstallManager   com.android.packageinstaller         D  onFinished---->1515810306  success--->true
  SilenceInstallManager   com.android.packageinstaller         D  install success
  InstallStart            com.android.packageinstaller         D  copy file from user app finish
  InstallStart            com.android.packageinstaller         D  send to install
  GED                     com.android.packageinstaller         I  ged_boost_gpu_freq, level 100, eOrigin 2, final_idx 2, oppidx_max 2, oppidx_min 0
  SilenceInstallReceiver  com.android.packageinstaller         W  SilenceInstallReceiver getAction---->com.android.packageinstaller.ACTION_SILENCE_INSTALL
  SilenceInstallManager   com.android.packageinstaller         E  params.abiOverride:null
  PackageParser           com.android.packageinstaller         W  Unknown element under <manifest>: meta-data at /data/user_de/0/com.android.packageinstaller/no_backup/package2449558720285641032.apk Binary XML file line #18
  PackageParser           com.android.packageinstaller         W  Unknown element under <manifest>: queries at /data/user_de/0/com.android.packageinstaller/no_backup/package2449558720285641032.apk Binary XML file line #121
  PackageParser           com.android.packageinstaller         W  Unknown element under <manifest>: queries at /data/user_de/0/com.android.packageinstaller/no_backup/package2449558720285641032.apk Binary XML file line #174
  PackageParser           com.android.packageinstaller         W  Unknown element under <application>: uses-native-library at /data/user_de/0/com.android.packageinstaller/no_backup/package2449558720285641032.apk Binary XML file line #247
  PackageParser           com.android.packageinstaller         W  Unknown element under <application>: uses-native-library at /data/user_de/0/com.android.packageinstaller/no_backup/package2449558720285641032.apk Binary XML file line #250
  PackageParser           com.android.packageinstaller         W  Unknown element under <application>: uses-native-library at /data/user_de/0/com.android.packageinstaller/no_backup/package2449558720285641032.apk Binary XML file line #253
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.8
  BufferQueueProducer     com.android.packageinstaller         D  [VRI[InstallStart]#11(BLAST Consumer)11](id:b7b0000000b,api:1,p:2939,c:2939) disconnect: api 1
  BLASTBufferQueue        com.android.packageinstaller         D  [VRI[InstallStart]#11](f:0,a:1) destructor()
  BufferQueueConsumer     com.android.packageinstaller         D  [VRI[InstallStart]#11(BLAST Consumer)11](id:b7b0000000b,api:0,p:-1,c:2939) disconnect
  View                    com.android.packageinstaller         D  [Warning] assignParent to null: this = DecorView@81df6a7[InstallStart]
  InputTransport          com.android.packageinstaller         D  Destroy ARC handle: 0xb400006dbbe9ee80
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.90000004
  SilenceInstallManager   com.android.packageinstaller         D  onCreated---->1438122699
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onActiveChanged---->1438122699  active--->true
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.0
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.0072567537
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.021770261
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.03628377
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.050797272
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.065310776
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.07982428
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.094337784
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.108851306
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.12336482
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.13787834
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.15239185
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.16690537
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.18141888
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.1959324
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.21044591
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.2249594
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.2394729
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.2539864
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.26849988
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.28301337
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.29752687
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.31204036
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.32655385
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.34106734
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.35558084
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.37009433
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.38460782
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.3991213
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.41363484
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.42814833
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.44266182
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.4571753
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.4716888
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.4862023
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.5007158
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.5152293
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.5297428
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.54425627
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.55876976
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.57328326
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.58779675
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.60231024
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.61682373
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.6313372
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.6458507
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.6603642
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.6748777
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.6893912
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.7039047
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.7184182
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.7329317
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.74744517
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.76195866
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.77647215
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.79098564
  SilenceInstallManager   com.android.packageinstaller         D  send install PendingIntent----->
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onActiveChanged---->1438122699  active--->false
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.8
  SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.90000004
  SilenceInstallManager   com.android.packageinstaller         D  onFinished---->159120445  success--->true
  SilenceInstallManager   com.android.packageinstaller         D  install success
  SilenceInstallManager   com.android.packageinstaller         D  launch app--->

扩展

实践中遇到的问题

  • 不同ODM厂商Android源码、相同ODM厂商Android 不同Android版本,源码少许不一致,需要自己更具实际情况适配 改一改。涉及到方法名、包括类名。
  • 针对GMS版本产品,谷歌的安装包程序会GooglePackageInstaller 覆盖源码里面PackageInstaller 程序,实际测试就会发现安装程序走的居然是包名为com.google.android.packageinstaller的程序。
    但是谷歌安装包程序提供的是apk 形式,路径如下: \vendor\google\apps\GooglePackageInstaller\GooglePackageInstaller.apk 不是源码形式是无法更改的。那又怎么实现呢?
    可以尝试把安装逻辑代码放到系统设置里面去,跳转入口直接跳转到设置。【针对定制的安装apk程序,如果GMS认证能过的情况下】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/977285.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MacOS本地部署Deepseek,不联网也可以使用AI,保护隐私

苹果笔记本本地部署deepseek主要用到Ollama与open-webui 1. 安装Ollama “Ollama” 是一个轻量级的 AI 模型运行时环境&#xff08;runtime&#xff09;&#xff0c;旨在简化在本地部署和使用大语言模型&#xff08;LLM&#xff09;的过程。它由 Vicarious 公司开发&#xff…

Golang笔记——Interface类型

大家好&#xff0c;这里是&#xff0c;关注 公主号&#xff1a;Goodnote&#xff0c;专栏文章私信限时Free。本文详细介绍Golang的interface数据结构类型&#xff0c;包括基本实现和使用等。 文章目录 Go 语言中的 interface 详解接口定义实现接口空接口 interface{} 示例&…

docker容器网络配置及常用操作

Linux内核实现名称空间的创建 ip netns&#xff08;网络名称空间&#xff09;命令 可以借助ip netns命令来完成对 Network Namespace 的各种操作。ip netns命令来自于iproute安装包&#xff0c;一般系统会默认安装&#xff0c;如果没有的话&#xff0c;请自行安装。 注意&am…

leetcode - hot100 - python - 专题二:双指针

1、移动0 &#xff08;一句话概括题眼&#xff1a;右指针找非0元素&#xff09; 简单 给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。 请注意 &#xff0c;必须在不复制数组的情况下原地对数组进行操作。 示例…

【玩转 Postman 接口测试与开发2_020】(完结篇)DIY 实战:随书示例 API 项目本地部署保姆级搭建教程(含完整调试过程)

《API Testing and Development with Postman》最新第二版封面 文章目录 最新版《Postman 接口测试与开发实战》示例 API 项目本地部署保姆级搭建教程1 前言2 准备工作3 具体部署3.1 将项目 Fork 到自己名下3.2 创建虚拟环境并安装依赖3.3 初始运行与项目调试 4 示例项目的用法…

【第五节】C++设计模式(创建型模式)-Prototype(原型)模式

目录 一、问题背景 二、 模式选择 三、讨论总结 一、问题背景 在软件开发中&#xff0c;有时我们需要通过已有对象来创建新对象&#xff0c;而不是从头开始构建。这种需求让我想起了现代制造业中的 3D 打印技术。通过扫描一个现有的物体&#xff0c;3D 打印机可以快速复制出…

next.js-学习2

next.js-学习2 1. https://nextjs.org/learn/dashboard-app/getting-started2. 模拟的数据3. 添加样式4. 字体&#xff0c;图片5. 创建布局和页面页面导航 1. https://nextjs.org/learn/dashboard-app/getting-started /app: Contains all the routes, components, and logic …

OpenCV计算摄影学(1)图像修复(Inpainting)的函数inpaint()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 使用图像中选定区域的邻域来恢复该选定区域。 cv::inpaint 函数是 OpenCV 中用于图像修复&#xff08;Inpainting&#xff09;的一个重要函数。它…

北京智和信通:全方位智能 OLT、ONU 设备监控运维方案

随着网络技术的不断迭代与发展&#xff0c;OLT作为光纤接入网中的核心设备&#xff0c;负责管理多个ONU&#xff0c;实现数据的传输和分配。其监控与运维的重要性愈发凸显&#xff0c;为了确保网络运行的高效与稳定&#xff0c;选择一套全面且高效的OLT、ONU监控运维方案显得尤…

python-leetcode-搜索二维矩阵 II

240. 搜索二维矩阵 II - 力扣&#xff08;LeetCode&#xff09; class Solution:def searchMatrix(self, matrix: List[List[int]], target: int) -> bool:if not matrix or not matrix[0]:return Falsem, n len(matrix), len(matrix[0])i, j 0, n - 1 # 从右上角开始whi…

推送项目 之 解决冲突

文章目录 为什么会发生冲突&#xff1f;如何解决这些冲突&#xff1f;1. **查看冲突文件**2. **解决二进制文件冲突**3. **解决文本文件冲突**4. **标记冲突已解决**5. **完成合并**6. **推送更改** 注意事项总结 问题&#xff1a;我们在git pusll拉取远程仓库的代码到本地对比…

网页版的俄罗斯方块

1、新建一个txt文件 2、打开后将代码复制进去保存 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>俄…

Docker 部署 Jenkins持续集成(CI)工具

[TOC](Docker 部署 Jenkins持续集成(CI)工具) 前言 Jenkins 是一个流行的开源自动化工具&#xff0c;广泛应用于持续集成&#xff08;CI&#xff09;和持续交付&#xff08;CD&#xff09;的环境中。通过 Docker 部署 Jenkins&#xff0c;可以简化安装和配置过程&#xff0c;并…

LLM+多智能体协作:基于CrewAI与DeepSeek的邮件自动化实践

文章目录 引言理解 Flows&#xff08;工作流&#xff09;与 Crews&#xff08;协作组&#xff09;一、环境准备与工具安装1.1 Python环境搭建1.2 创建并激活虚拟环境1.3 安装核心依赖库&#xff08;crewai、litellm&#xff09; 二、本地DeepSeek R1大模型部署2.1 Ollama框架安…

[SQL] 事务的四大特性(ACID)

&#x1f384;事务的四大特性 以下就是事务的四大特性&#xff0c;简称ACID。 原子性&#x1f4e2;事务时不可分割的最小操作单元&#xff0c;要么全部成功&#xff0c;要么全部失败。一致性&#x1f4e2;事务完成后&#xff0c;必须使所有的数据都保持一致隔离性&#x1f4e2…

AI时代前端开发:自主学习能力的培养

在人工智能&#xff08;AI&#xff09;飞速发展的今天&#xff0c;技术迭代的速度如同脱缰的野马&#xff0c;对所有技术人员&#xff0c;特别是前端开发者&#xff0c;都提出了前所未有的挑战。新的框架、库、工具层出不穷&#xff0c;稍有松懈&#xff0c;就会被时代抛在身后…

【备赛】点亮LED

LED部分的原理图 led前面有锁存器&#xff0c;这是为了防止led会受到lcd的干扰&#xff08;lcd也需要用到这些引脚&#xff09;。 每次想要对led操作&#xff0c;就需要先打开锁存器&#xff0c;再执行操作&#xff0c;最后关闭锁存器。 这里需要注意的是&#xff0c;引脚配置…

Rocky8 源码安装 HAProxy

HAProxy 是一款开源的高性能 负载均衡器 和 反向代理 软件&#xff0c;专注于处理高并发流量分发&#xff0c;广泛应用于企业级架构中提升服务的可用性、扩展性和安全性。 一、HAProxy 简介 1.1.HAProxy 是什么&#xff1f; 本质&#xff1a; 基于 C 语言开发 的轻量级工具&a…

Javascript网页设计案例:通过PDFLib实现一款PDF分割工具,分割方式自定义-完整源代码,开箱即用

功能预览 一、工具简介 PDF 分割工具支持以下核心功能: 拖放或上传 PDF 文件:用户可以通过拖放或点击上传 PDF 文件。两种分割模式: 指定范围:用户可以指定起始页和结束页,提取特定范围的内容。固定间距:用户可以设置间隔页数(例如每 5 页分割一次),工具会自动完成分…

微信小程序调用火山方舟(字节跳动火山引擎)中的DeepSeek大模型

一、注册火山引擎账号&#xff0c;创建API Key和model&#xff08;接入点ID&#xff09; 1.注册并登陆火山引擎账号&#xff0c;网址为&#xff1a;https://console.volcengine.com/ 2.根据登陆后的页面提示进行实名认证&#xff0c;实名认证后才能创建API Keyt和创建接入点。…