PackageMS 启动

1.PackageMS 相关框架类

2.PackageMS 启动过程 

2.1 # SystemServer.java

 /**
291     * The main entry point from zygote.
292     */
293    public static void main(String[] args) {
294        new SystemServer().run();
295    }

上面是SystemServer的主函数。

private void run() {
// Start services.
427        try {
428            traceBeginAndSlog("StartServices");
429            startBootstrapServices(); // 在这个里面启动PMS
430            startCoreServices();
431            startOtherServices();
432            SystemServerInitThreadPool.shutdown();
433        } catch (Throwable ex) {
434            Slog.e("System", "******************************************");
435            Slog.e("System", "************ Failure starting system services", ex);
436            throw ex;
437        } finally {
438            traceEnd();
439        }

}

private void startBootstrapServices(){

...

traceBeginAndSlog("StartPackageManagerService");
628        mPackageManagerService = PackageManagerService.main(mSystemContext, installer,
629                mFactoryTestMode != FactoryTest.FACTORY_TEST_OFF, mOnlyCore);
630        mFirstBoot = mPackageManagerService.isFirstBoot();
631        mPackageManager = mSystemContext.getPackageManager(); 

...

}

 2.2 SystemServer

   

/**
1018       * organized.
1019       */
1020      private void startOtherServices(@NonNull TimingsTraceAndSlog t) {

                 ...

         

 t.traceBegin("StartBootPhaseSystemServicesReady");
2167          mSystemServiceManager.startBootPhase(t, SystemService.PHASE_SYSTEM_SERVICES_READY);
2168          t.traceEnd();

............

     

 t.traceBegin("MakePackageManagerServiceReady");
2238          mPackageManagerService.systemReady();
2239          t.traceEnd();
2240  

                ....

}

2.3  PackageMS

frameworks/base/services/core/java/com/android/server/pm/

public static PackageManagerService main(Context context, Installer installer,
2570              boolean factoryTest, boolean onlyCore) {

                 。。。

           

  PackageManagerService m = new PackageManagerService(injector, onlyCore, factoryTest);
2607          t.traceEnd(); // "create package manager"

. 。。。。。。。。。。。。

 m.installWhitelistedSystemPackages();
2644          ServiceManager.addService("package", m); //核心
2645          final PackageManagerNative pmn = m.new PackageManagerNative();
2646          ServiceManager.addService("package_native", pmn);
2647          return m;

。。。。。。。。。。。。

}

2.4 PackageMS 初始化

从:PackageManagerService

public PackageManagerService(Injector injector, boolean onlyCore, boolean factoryTest) {

     //创建设置,从这里来的

(i, pm) ->
2590                          new Settings(Environment.getDataDirectory(),
2591                                  i.getPermissionManagerServiceInternal().getPermissionSettings(),
2592                                  lock),

 mSettings = injector.getSettings();

//ystem phone log nfc bluetooth shell 添加到Setting

 t.traceBegin("addSharedUsers");
2885          mSettings.addSharedUserLPw("android.uid.system", Process.SYSTEM_UID,
2886                  ApplicationInfo.FLAG_SYSTEM, ApplicationInfo.PRIVATE_FLAG_PRIVILEGED);
2887          mSettings.addSharedUserLPw("android.uid.phone", RADIO_UID,
2888                  ApplicationInfo.FLAG_SYSTEM, ApplicationInfo.PRIVATE_FLAG_PRIVILEGED);
2889          mSettings.addSharedUserLPw("android.uid.log", LOG_UID,
2890                  ApplicationInfo.FLAG_SYSTEM, ApplicationInfo.PRIVATE_FLAG_PRIVILEGED);
2891          mSettings.addSharedUserLPw("android.uid.nfc", NFC_UID,
2892                  ApplicationInfo.FLAG_SYSTEM, ApplicationInfo.PRIVATE_FLAG_PRIVILEGED);
2893          mSettings.addSharedUserLPw("android.uid.bluetooth", BLUETOOTH_UID,
2894                  ApplicationInfo.FLAG_SYSTEM, ApplicationInfo.PRIVATE_FLAG_PRIVILEGED);
2895          mSettings.addSharedUserLPw("android.uid.shell", SHELL_UID,
2896                  ApplicationInfo.FLAG_SYSTEM, ApplicationInfo.PRIVATE_FLAG_PRIVILEGED);
2897          mSettings.addSharedUserLPw("android.uid.se", SE_UID,
2898                  ApplicationInfo.FLAG_SYSTEM, ApplicationInfo.PRIVATE_FLAG_PRIVILEGED);
2899          mSettings.addSharedUserLPw("android.uid.networkstack", NETWORKSTACK_UID,
2900                  ApplicationInfo.FLAG_SYSTEM, ApplicationInfo.PRIVATE_FLAG_PRIVILEGED);
2901          t.traceEnd();

.........................................

//

 mPackageDexOptimizer = new PackageDexOptimizer(mInstaller, mInstallLock, mContext,
2921                  "*dexopt*");

................................

//3 初始化 SystemConfig

 t.traceBegin("get system config");
2932          SystemConfig systemConfig = SystemConfig.getInstance();
2933          mAvailableFeatures = systemConfig.getAvailableFeatures();
2934          ApplicationPackageManager.invalidateHasSystemFeatureCache();
2935          t.traceEnd();
 // CHECKSTYLE:OFF IndentationCheck
2957          synchronized (mInstallLock) {

        创建 PackageHandler      

  mHandlerThread = new ServiceThread(TAG,
2961                      Process.THREAD_PRIORITY_BACKGROUND, true /*allowIo*/);
2962              mHandlerThread.start();
2963              mHandler = new PackageHandler(mHandlerThread.getLooper());
2964              mProcessLoggingHandler = new ProcessLoggingHandler();
2965              Watchdog.getInstance().addThread(mHandler, WATCHDOG_TIMEOUT);
2966              mInstantAppRegistry = new InstantAppRegistry(this);

...............................................

     //开始扫描

  EventLog.writeEvent(EventLogTags.BOOT_PROGRESS_PMS_SYSTEM_SCAN_START,
3032                      startTime);
3033  
3034              final String bootClassPath = System.getenv("BOOTCLASSPATH");
3035              final String systemServerClassPath = System.getenv("SYSTEMSERVERCLASSPATH");

。。。。。。。。。。。。。。。。。。。。

//对满足条件的 Jar Apk 执行 dex 优化

   //处理非系统 App //data/app 、 自定义app 路径  //  PMS_DATA_SCAN_START

 if (!mOnlyCore) {
3550                  mRequiredVerifierPackage = getRequiredButNotReallyRequiredVerifierLPr();
3551                  mOptionalVerifierPackage = getOptionalVerifierLPr();
3552                  mRequiredInstallerPackage = getRequiredInstallerLPr();
3553                  mRequiredUninstallerPackage = getRequiredUninstallerLPr();
3554                  mIntentFilterVerifierComponent = getIntentFilterVerifierComponentNameLPr();
3555                  if (mIntentFilterVerifierComponent != null) {
3556                      mIntentFilt

}

 

}

 }

PackageManagerService

........

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在.json中,可以使用"scripts"字段来定义启动服务的命令。常见的启动服务命令包括: - 使用nodemon运行index.js文件:可以在"scripts"字段中添加"start"字段,并将其值设置为"nodemon app/index.js",这样可以使用npm start命令来启动服务。 - 使用webpack运行构建命令:可以将"start"字段设置为"webpack",然后使用npm start命令来执行webpack的构建命令。 - 使用webpack实时打包命令:可以将"start"字段设置为"webpack --watch",这样在保存文件时,webpack会自动重新打包。 - 使用webpack开启服务运行:可以将"start"字段设置为"webpack serve --open",这样可以使用npm start命令来启动webpack的开发服务器。 - 使用webpack配置环境变量命令:可以将"start"字段设置为"webpack serve --open && webpack --env goal=local --env development",这样可以同时运行Webpack开发服务器和构建命令,并配置环境变量。 总结起来,你可以根据需要在package.json的"scripts"字段中定义不同的启动服务命令。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [package.json详细介绍](https://blog.csdn.net/qq_42880714/article/details/129246215)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [package.json配置运行命令](https://blog.csdn.net/m0_54741495/article/details/130158789)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值