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;@Overridepublic 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 accurateString 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;}@Overrideprotected 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 cancellationout.write(buffer, 0, bytesRead);}}return mStagedFile;} catch (IOException | SecurityException | IllegalStateException e) {Log.w(LOG_TAG, "Error staging apk from content URI", e);}return null;}@Overrideprotected void onPostExecute(File installFile) {if (null != installFile) {// Now start the installation again from a fileLog.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.54425627SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.54425627SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.55876976SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.55876976SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.55876976SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.55876976SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.55876976SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.55876976SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.57328326SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.57328326SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.57328326SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.57328326SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.57328326SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.57328326SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.58779675SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.58779675SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.58779675SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.58779675SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.58779675SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.58779675SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.60231024SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.60231024SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.60231024SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.60231024SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.60231024SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.60231024SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.61682373SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.61682373SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.61682373SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.61682373SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.61682373SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.61682373SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.6313372SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.6313372SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.6313372SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.6313372SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.6313372SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.6313372SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.6458507SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.6458507SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.6458507SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.6458507SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.6458507SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.6458507SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.6603642SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.6603642SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.6603642SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.6603642SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.6603642SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.6603642SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.6748777SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.6748777SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.6748777SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.6748777SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.6748777SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.6748777SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.6893912SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.6893912SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.6893912SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.6893912SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.6893912SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.6893912SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.7039047SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.7039047SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.7039047SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.7039047SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.7039047SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.7039047SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.7184182SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.7184182SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.7184182SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.7184182SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.7184182SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.7184182SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.7329317SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.7329317SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.7329317SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.7329317SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.7329317SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.7329317SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.74744517SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.74744517SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.74744517SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.74744517SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.74744517SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.74744517AutofillManager         com.android.packageinstaller         D  Fill dialog is enabled:false, hints=[]SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.76195866SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.76195866SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.76195866SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.76195866SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.76195866SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.76195866SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.77647215SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.77647215SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.77647215SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.77647215SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.77647215SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.77647215SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.79098564SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.79098564SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.79098564SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.79098564SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.79098564SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.79098564InstallStart            com.android.packageinstaller         D  copy file from user app startSilenceInstallManager   com.android.packageinstaller         D  send install PendingIntent----->SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onActiveChanged---->800223053  active--->falseSilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onActiveChanged---->800223053  active--->falseSilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onActiveChanged---->800223053  active--->falseSilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onActiveChanged---->800223053  active--->falseSilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onActiveChanged---->800223053  active--->falseSilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onActiveChanged---->800223053  active--->falseSilenceInstallManager   com.android.packageinstaller         D  onFinished---->1515810306  success--->trueSilenceInstallManager   com.android.packageinstaller         D  onFinished---->1515810306  success--->trueSilenceInstallManager   com.android.packageinstaller         D  onFinished---->1515810306  success--->trueSilenceInstallManager   com.android.packageinstaller         D  onFinished---->1515810306  success--->trueSilenceInstallManager   com.android.packageinstaller         D  onFinished---->1515810306  success--->trueSilenceInstallManager   com.android.packageinstaller         D  install successSilenceInstallManager   com.android.packageinstaller         D  launch app--->SilenceInstallManager   com.android.packageinstaller         D  install successSilenceInstallManager   com.android.packageinstaller         D  install successSilenceInstallManager   com.android.packageinstaller         D  install successSilenceInstallManager   com.android.packageinstaller         D  install successSilenceInstallManager   com.android.packageinstaller         D  onFinished---->1515810306  success--->trueSilenceInstallManager   com.android.packageinstaller         D  install successInstallStart            com.android.packageinstaller         D  copy file from user app finishInstallStart            com.android.packageinstaller         D  send to installGED                     com.android.packageinstaller         I  ged_boost_gpu_freq, level 100, eOrigin 2, final_idx 2, oppidx_max 2, oppidx_min 0SilenceInstallReceiver  com.android.packageinstaller         W  SilenceInstallReceiver getAction---->com.android.packageinstaller.ACTION_SILENCE_INSTALLSilenceInstallManager   com.android.packageinstaller         E  params.abiOverride:nullPackageParser           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 #18PackageParser           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 #121PackageParser           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 #174PackageParser           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 #247PackageParser           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 #250PackageParser           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 #253SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.8BufferQueueProducer     com.android.packageinstaller         D  [VRI[InstallStart]#11(BLAST Consumer)11](id:b7b0000000b,api:1,p:2939,c:2939) disconnect: api 1BLASTBufferQueue        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) disconnectView                    com.android.packageinstaller         D  [Warning] assignParent to null: this = DecorView@81df6a7[InstallStart]InputTransport          com.android.packageinstaller         D  Destroy ARC handle: 0xb400006dbbe9ee80SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->800223053  progress--->0.90000004SilenceInstallManager   com.android.packageinstaller         D  onCreated---->1438122699SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onActiveChanged---->1438122699  active--->trueSilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.0SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.0072567537SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.021770261SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.03628377SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.050797272SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.065310776SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.07982428SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.094337784SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.108851306SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.12336482SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.13787834SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.15239185SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.16690537SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.18141888SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.1959324SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.21044591SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.2249594SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.2394729SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.2539864SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.26849988SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.28301337SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.29752687SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.31204036SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.32655385SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.34106734SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.35558084SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.37009433SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.38460782SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.3991213SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.41363484SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.42814833SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.44266182SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.4571753SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.4716888SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.4862023SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.5007158SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.5152293SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.5297428SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.54425627SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.55876976SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.57328326SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.58779675SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.60231024SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.61682373SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.6313372SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.6458507SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.6603642SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.6748777SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.6893912SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.7039047SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.7184182SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.7329317SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.74744517SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.76195866SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.77647215SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.79098564SilenceInstallManager   com.android.packageinstaller         D  send install PendingIntent----->SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onActiveChanged---->1438122699  active--->falseSilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.8SilenceInstallManager   com.android.packageinstaller         W  mSessionCallback onProgressChanged---->1438122699  progress--->0.90000004SilenceInstallManager   com.android.packageinstaller         D  onFinished---->159120445  success--->trueSilenceInstallManager   com.android.packageinstaller         D  install successSilenceInstallManager   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认证能过的情况下】

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

qt-C++笔记之创建和初始化 `QGraphicsScene` 和 `QGraphicsView` 并关联视图和场景的方法

qt-C++笔记之创建和初始化 QGraphicsScene 和 QGraphicsView 并关联视图和场景的方法 code review! 参考笔记 1.qt-C++笔记之创建和初始化 QGraphicsScene 和 QGraphicsView 并关联视图和场景的方法 2.qt-C++笔记之QGraphicsScene和 QGraphicsView中setScene、通过scene得到vie…

《一起打怪兽吧》——自制一款Python小游戏

《一起消灭怪兽吧》——在深夜的屏幕前&#xff0c;你是指引光明的勇者。键盘化作利剑&#xff0c;用方向键在像素战场游走&#xff0c;发射吧&#xff0c;每次击杀都有代码绽放的烟火。这款由Python与Pygame铸就的小游戏&#xff0c;让0与1的世界生长出童真的浪漫。 文章目录…

IDEA中查询Maven项目的依赖树

在Maven项目中&#xff0c;查看项目的依赖树是一个常见的需求&#xff0c;特别是当你需要了解项目中直接或间接依赖了哪些库及其版本时。你可以通过命令行使用Maven的dependency:tree插件来做到这一点。这个命令会列出项目中所有依赖的树状结构。 打开idea项目的终端&#xff…

Maven——Maven开发经验总结(1)

摘要 本文总结了 Maven 开发中的多个关键经验&#xff0c;包括如何根据版本号决定推送到 releases 或 snapshots 仓库&#xff0c;如何在构建过程中跳过测试&#xff0c;父项目如何控制子项目依赖版本&#xff0c;父项目依赖是否能传递到子项目&#xff0c;如何跳过 Maven dep…

05. Springboot admin集成Actuator(一)

目录 1、前言 2、Actuator监控端点 2.1、健康检查 2.2、信息端点 2.3、环境信息 2.4、度量指标 2.5、日志文件查看 2.6、追踪信息 2.7、Beans信息 2.8、Mappings信息 3、快速使用 2.1、添加依赖 2.2、添加配置文件 2.3、启动程序 4、自定义端点Endpoint 5、自定…

【GESP】C++二级模拟 luogu-b3995, [GESP 二级模拟] 小洛的田字矩阵

GESP二级模拟题&#xff0c;多层循环、分支语句练习&#xff0c;难度★✮☆☆☆。 题目题解详见&#xff1a;https://www.coderli.com/gesp-2-luogu-b3995/ 【GESP】C二级模拟 luogu-b3995, [GESP 二级模拟] 小洛的田字矩阵 | OneCoderGESP二级模拟题&#xff0c;多层循环、分…

uniapp在app下使用mqtt协议!!!支持vue3

什么&#xff1f;打包空白&#xff1f;分享一下我的解决方法&#xff01; 第一步 找大师算过了&#xff0c;装4.1版本运气好&#xff01; 所以根目录执行命令… npm install mqtt4.1.0第二步 自己封装一个mqtt文件方便后期开坛做法&#xff01; // utils/mqtt.js import mqt…

C++程序员内功修炼——Linux C/C++编程技术汇总

在软件开发的宏大版图中&#xff0c;C 语言宛如一座巍峨的高山&#xff0c;吸引着无数开发者攀登探索。而 Linux 操作系统&#xff0c;以其开源、稳定、高效的特性&#xff0c;成为了众多开发者钟爱的开发平台。将 C 与 Linux 相结合&#xff0c;就如同为开发者配备了一把无坚不…

【Python量化金融实战】-第2章:金融市场数据获取与处理:2.1 数据源概览:Tushare、AkShare、Baostock、通联数据(DataAPI)

本章将详细介绍四大主流金融数据源&#xff08;Tushare、AkShare、Baostock、通联数据&#xff08;DataAPI&#xff09;&#xff09;&#xff0c;分析其特点与适用场景&#xff0c;并通过实战案例展示数据获取与处理的全流程。 &#x1f449; 点击关注不迷路 &#x1f449; 点击…

一文讲解Redis的持久化方式及各自的区别

一文讲解Redis的持久化方式及各自的区别 Redis 的持久化机制保证了 Redis 服务器在重启后数据不丢失&#xff0c;通过 RDB 和 AOF 文件来恢复内存中原有的数据。 这两种持久化方式可以单独使用&#xff0c;也可以同时使用。 三分恶面渣逆袭&#xff1a;Redis持久化的两种方式…

STM32 利用SysTick实现高精度计时

STM32 HAL库利用ARM Cortex-M内核自带的24位递减计数器SysTick(系统节拍)&#xff0c;它属于 NVIC的一部分,且可以产生 SysTick 异常(异常类型#15)。通过读取并判断计数值来实现精确延时&#xff0c;从0xFFFFFF向下计数到0。可以用作I2C、SPI通信中的时序控制&#xff0c;RTOS环…

图像金字塔

图像金字塔&#xff08;MATLAB 版本&#xff09; 目录 图像金字塔&#xff08;MATLAB 版本&#xff09;一、 生成图像金字塔二、 Matlab实践操作三、实践问题 一、 生成图像金字塔 在 MATLAB 中&#xff0c;可以使用 impyramid 函数来生成图像金字塔。 代码示例&#xff1a; m…

2024-2025 学年广东省职业院校技能大赛 “信息安全管理与评估”赛项 技能测试试卷(一)

2024-2025 学年广东省职业院校技能大赛 “信息安全管理与评估”赛项 技能测试试卷&#xff08;一&#xff09; 第一部分&#xff1a;网络平台搭建与设备安全防护任务书DCRS:DCFW:DCWS:WAF: 第二部分&#xff1a;网络安全事件响应、数字取证调查、应用程序安全任务书任务 1&…

20250212:https通信

1:防止DNS劫持:使用 https 进行通信。 因为是SDK授权开发,需要尽量压缩so库文件和三方依赖。所以第一想法是使用 head only 的 cpp-httplib 进行开发。 cpp-httplib 需要 SSL 版本是 3.0及以上。但本地已经在开发使用的是1.0.2a版本,不满足需求。 方案1:升级OpenSSL 将Op…

一、C#基础入门课程【学习20天】01-07

✨博客主页&#xff1a; https://blog.csdn.net/m0_63815035?typeblog &#x1f497;《博客内容》&#xff1a;.NET、Java.测试开发、Python、Android、Go、Node、Android前端小程序等相关领域知识 &#x1f4e2;博客专栏&#xff1a; https://blog.csdn.net/m0_63815035/cat…

基于SpringBoot + Vue的共享汽车(单车)管理系统设计与实现+毕业论文+开题报告+指导搭建视频

本系统包含管理员、用户两个角色。 管理员角色&#xff1a;个人中心管理、用户管理、投放地区管理、汽车信息管理、汽车投放管理、汽车入库管理、使用订单管理、汽车归还管理。 用户角色&#xff1a;注册登录、汽车使用下单、汽车归还。 本共享汽车管理系统有管理员和用户。管…

DeepSeek+Kimi生成高质量PPT

DeepSeek与Kimi生成PPT全流程解析 一、工具分工原理 DeepSeek核心作用&#xff1a;生成结构化PPT大纲&#xff08;擅长逻辑构建与内容优化&#xff09;Kimi核心作用&#xff1a;将文本转换为视觉化PPT&#xff08;提供模板库与排版引擎&#xff09; 二、操作步骤详解 1. 通…

Android KMP初探

Android KMP初探 前言&#xff1a; 最近线上听了Kotlin官网举行的KMP会议&#xff0c;感觉听神奇的&#xff0c;于是就把官方demo下载下来尝试了一下&#xff0c;下载插件和所需要的依赖都用了很久&#xff0c;但是发现里面的代码很少&#xff0c;于是尝试自己手写了一下&…

鸿蒙NEXT应用App测试-通用测试

注意&#xff1a;大家记得学完通用测试记得再学鸿蒙专项测试 https://blog.csdn.net/weixin_51166786/article/details/145768653 注意&#xff1a;博主有个鸿蒙专栏&#xff0c;里面从上到下有关于鸿蒙next的教学文档&#xff0c;大家感兴趣可以学习下 如果大家觉得博主文章…

GO 快速升级Go版本

由于底层依赖升级了&#xff0c;那我们也要跟着升&#xff0c;go老版本已经不足满足需求了&#xff0c;必须要将版本升级到1.22.0以上 查看当前Go版本 命令查看go版本 go version [rootlocalhost local]# go version go version go1.21.4 linux/amd64 [rootlocalhost local]# …