美文网首页
Android安装APP的源码微解读

Android安装APP的源码微解读

作者: Guoke24 | 来源:发表于2018-11-10 12:32 被阅读0次
    • 在开发第三方app时,一般会采用非静默的app安装方式,这需要发intent来
    private void install(String filePath) {
            Log.i(TAG, "开始执行安装: " + filePath);
            File apkFile = new File(filePath);
            Intent intent = new Intent(Intent.ACTION_VIEW);
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
                Log.w(TAG, "版本大于 N ,开始使用 fileProvider 进行安装");
                intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
                Uri contentUri = FileProvider.getUriForFile(
                        mContext
                        , "你的包名.fileprovider"
                        , apkFile);
                intent.setDataAndType(contentUri, "application/vnd.android.package-archive");
            } else {
                Log.w(TAG, "正常进行安装");
                intent.setDataAndType(Uri.fromFile(apkFile), "application/vnd.android.package-archive");
            }
            startActivity(intent);
        }
    

    更具体的代码,请看: Android 在代码中安装 APK 文件
    这个会走到 packageinstaller.apk 应用处理安装过程的界面(卸载也走这里)
    首先进入这个类:PackageInstallerActivity.java
    安装过程是这个类:InstallAppProgress.java

    • 如果是想静默安装app,那就直接调用:
    PackageManager pm = mContext.getPackageManager();
    Uri uri = Uri.parse("file://" + mFirmWarePath);
    int installFlags = 0;
    PackageInstallObserver observer = new PackageInstallObserver();
    pm.installPackage(uri, observer, installFlags, null);
    
    • installFlags 参数解析
    /android/content/pm/PackageManager.java
    public static final int INSTALL_FROM_ADB = 0x00000020;
    public static final int INSTALL_ALL_USERS = 0x00000040;
    // 降级安装
    public static final int INSTALL_ALLOW_DOWNGRADE = 0x00000080;
    

    参与或运算

    • 无论那种调用,最终都会都到
      PackageManagerService.installPackageAsUser
      位置:/frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java

    • installPackageAsUser 函数是 PMS 端的起点
      往下可以看这篇:android apk安装过程源码解析

    待续 ......
    • 上述用到的参考链接:
    1. Android 在代码中安装 APK 文件
    2. Android应用程序安装过程解析(源码角度)
    3. android apk安装过程源码解析
    4. 老罗:Android应用程序安装过程源代码分析

    相关文章

      网友评论

          本文标题:Android安装APP的源码微解读

          本文链接:https://www.haomeiwen.com/subject/prrzxqtx.html