launcher 启动与加密

31 篇文章 1 订阅

launcher 启动流程:

https://blog.csdn.net/liangtianmeng/article/details/83063656

 

launcher 主界面启动堆栈:
"main" prio=5 tid=1 Runnable
  | group="main" sCount=0 dsCount=0 flags=0 obj=0x780ce998 self=0x7131014c00
  | sysTid=1483 nice=-10 cgrp=default sched=0/0 handle=0x71b6b2e548
  | state=R schedstat=( 479263992 17764508 1009 ) utm=22 stm=25 core=0 HZ=100
  | stack=0x7fe1a30000-0x7fe1a32000 stackSize=8MB
  | held mutexes= "mutator lock"(shared held)
  native: #00 pc 00000000003c5ec8  /system/lib64/libart.so (art::DumpNativeStack(std::__1::basic_ostream<char, std::__1::char_traits<char>>&, int, BacktraceMap*, char const*, art::ArtMethod*, void*, bool)+220)
  native: #01 pc 0000000000493530  /system/lib64/libart.so (art::Thread::DumpStack(std::__1::basic_ostream<char, std::__1::char_traits<char>>&, bool, BacktraceMap*, bool) const+352)
  native: #02 pc 00000000004ad1a8  /system/lib64/libart.so (art::DumpCheckpoint::Run(art::Thread*)+844)
  native: #03 pc 00000000004941dc  /system/lib64/libart.so (art::Thread::RunCheckpointFunction()+204)
  native: #04 pc 00000000001377ac  /system/lib64/libart.so (art::ClassLinker::LinkFields(art::Thread*, art::Handle<art::mirror::Class>, bool, unsigned long*)+5852)
  native: #05 pc 000000000012c734  /system/lib64/libart.so (art::ClassLinker::LinkInstanceFields(art::Thread*, art::Handle<art::mirror::Class>)+72)
  native: #06 pc 0000000000121a9c  /system/lib64/libart.so (art::ClassLinker::LinkClass(art::Thread*, char const*, art::Handle<art::mirror::Class>, art::Handle<art::mirror::ObjectArray<art::mirror::Class>>, art::MutableHandle<art::mirror::Class>*)+288)
  native: #07 pc 000000000011d9c8  /system/lib64/libart.so (art::ClassLinker::DefineClass(art::Thread*, char const*, unsigned long, art::Handle<art::mirror::ClassLoader>, art::DexFile const&, art::DexFile::ClassDef const&)+916)
  native: #08 pc 0000000000144e78  /system/lib64/libart.so (_ZN3art27VisitClassLoaderDexElementsIZNS_24VisitClassLoaderDexFilesIZNS_24VisitClassLoaderDexFilesIZNS_11ClassLinker38FindClassInBaseDexClassLoaderClassPathERNS_33ScopedObjectAccessAlreadyRunnableEPKcmNS_6HandleINS_6mirror11ClassLoaderEEEE4$_30EEvS5_SB_T_EUlPKNS_7DexFileEPPvE_SH_EET0_S5_SB_SD_SK_EUlNS_6ObjPtrINS9_6ObjectEEESI_E_SH_EESK_S5_SB_SD_SK_+640)
  native: #09 pc 000000000011cfec  /system/lib64/libart.so (art::ClassLinker::FindClassInBaseDexClassLoader(art::ScopedObjectAccessAlreadyRunnable&, art::Thread*, char const*, unsigned long, art::Handle<art::mirror::ClassLoader>, art::ObjPtr<art::mirror::Class>*)+604)
  native: #10 pc 000000000011e4bc  /system/lib64/libart.so (art::ClassLinker::FindClass(art::Thread*, char const*, art::Handle<art::mirror::ClassLoader>)+1060)
  native: #11 pc 00000000001386d0  /system/lib64/libart.so (art::ClassLinker::DoResolveType(art::dex::TypeIndex, art::Handle<art::mirror::DexCache>, art::Handle<art::mirror::ClassLoader>)+188)
  native: #12 pc 000000000012ce4c  /system/lib64/libart.so (art::ClassLinker::ResolveType(art::dex::TypeIndex, art::ObjPtr<art::mirror::Class>)+308)
  native: #13 pc 00000000001215f4  /system/lib64/libart.so (art::ClassLinker::LoadSuperAndInterfaces(art::Handle<art::mirror::Class>, art::DexFile const&)+156)
  native: #14 pc 000000000011d940  /system/lib64/libart.so (art::ClassLinker::DefineClass(art::Thread*, char const*, unsigned long, art::Handle<art::mirror::ClassLoader>, art::DexFile const&, art::DexFile::ClassDef const&)+780)
  native: #15 pc 0000000000144e78  /system/lib64/libart.so (_ZN3art27VisitClassLoaderDexElementsIZNS_24VisitClassLoaderDexFilesIZNS_24VisitClassLoaderDexFilesIZNS_11ClassLinker38FindClassInBaseDexClassLoaderClassPathERNS_33ScopedObjectAccessAlreadyRunnableEPKcmNS_6HandleINS_6mirror11ClassLoaderEEEE4$_30EEvS5_SB_T_EUlPKNS_7DexFileEPPvE_SH_EET0_S5_SB_SD_SK_EUlNS_6ObjPtrINS9_6ObjectEEESI_E_SH_EESK_S5_SB_SD_SK_+640)
  native: #16 pc 000000000011cfec  /system/lib64/libart.so (art::ClassLinker::FindClassInBaseDexClassLoader(art::ScopedObjectAccessAlreadyRunnable&, art::Thread*, char const*, unsigned long, art::Handle<art::mirror::ClassLoader>, art::ObjPtr<art::mirror::Class>*)+604)
  native: #17 pc 00000000003e5958  /system/lib64/libart.so (art::VMClassLoader_findLoadedClass(_JNIEnv*, _jclass*, _jobject*, _jstring*)+668)
  at java.lang.VMClassLoader.findLoadedClass(Native method)
  at java.lang.ClassLoader.findLoadedClass(ClassLoader.java:738)
  at java.lang.ClassLoader.loadClass(ClassLoader.java:363)
  at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
  at android.view.LayoutInflater.createView(LayoutInflater.java:606)
  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:790)
  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:730)
  at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
  - locked <0x04082360> (a java.lang.Object[])
  at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
  at android.view.LayoutInflater.inflate(LayoutInflater.java:374)
  at com.android.launcher3.Launcher.onCreate(Launcher.java:538)
  at android.app.Activity.performCreate(Activity.java:8606)
  at android.app.Activity.performCreate(Activity.java:8597)
  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1274)
  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2951)
  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3120)
  at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
  at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
  at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1842)
  at android.os.Handler.dispatchMessage(Handler.java:106)
  at android.os.Looper.loop(Looper.java:193)
  at android.app.ActivityThread.main(ActivityThread.java:6953)
  at java.lang.reflect.Method.invoke(Native method)
  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:534)
  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)

 

 

 

 

根据Android9.0 Google CDD文档, aes加密速率大于50MB/s时需要开启FBE(File-Based Encryption) ,否则无法通过CTS测试。同时,开启FBE确实会改变开机流程, USER_UNLOCKED流程从用户解锁前移到了用户解锁后,导致用户解锁时间增加。

 

 

动画播放完执行unlock 的代码:

ActivityManager:  unlockUserCleared + token = null  secret = null

com.android.server.am.UserController.maybeUnlockUser:1143

com.android.server.am.UserController.finishUserBoot:378

com.android.server.am.UserController.sendBootCompleted:1635 com.android.server.am.ActivityManagerService.finishBooting:8564 com.android.server.am.ActivityManagerService.bootAnimationComplete:8593 

 

frameworks\base\services\core\java\com\android\server\am\UserController.java

private boolean unlockUserCleared(final int userId, byte[] token, byte[] secret,
        IProgressListener listener) {
    UserState uss;
    if (!StorageManager.isUserKeyUnlocked(userId)) {
        final UserInfo userInfo = getUserInfo(userId);
        final IStorageManager storageManager = getStorageManager();
        try {
            // We always want to unlock user storage, even user is not started yet
            storageManager.unlockUserKey(userId, userInfo.serialNumber, token, secret);//token scret 均为null
        } catch (RemoteException | RuntimeException e) {
            Slog.w(TAG, "Failed to unlock: " + e.getMessage());
        }
    }

 

frameworks\base\services\core\java\com\android\server\StorageManagerService.java

@Override
public void unlockUserKey(int userId, int serialNumber, byte[] token, byte[] secret) {
    enforcePermission(android.Manifest.permission.STORAGE_INTERNAL);

    if (StorageManager.isFileEncryptedNativeOrEmulated()) {//FBE 基于文件加密,不允许secret 为空,否则下边跑出异常
        // When a user has secure lock screen, require secret to actually unlock.
        // This check is mostly in place for emulation mode.
        if (mLockPatternUtils.isSecure(userId) && ArrayUtils.isEmpty(secret)) {
            throw new IllegalStateException("Secret required to unlock secure user " + userId);
        }

        try {
            mVold.unlockUserKey(userId, serialNumber, encodeBytes(token),
                    encodeBytes(secret));
        } catch (Exception e) {
            Slog.wtf(TAG, e);
            return;
        }
    }

    synchronized (mLock) {
        mLocalUnlockedUsers = ArrayUtils.appendInt(mLocalUnlockedUsers, userId);//FDE 将用户加入解锁列表
    }
}

 

launcher 启动

AMS 中systemready 启动

->startHomeActivityLocked(currentUserId, "systemReady");

 ActivityManager: START u0 {act=android.intent.action.MAIN cat=[android.intent.category.HOME] flg=0x10000100 cmp=com.android.settings/.FallbackHome} from uid 0

启动fallbackHome 

再到显示keyguard ,即 ->finishUserBoot  发送 ACTION_LOCKED_BOOT_COMPLETED ,打印

SystemServerTiming: finishUserBoot took too long. uptimeSeconds=210

 

解锁后,系统发送ACTION_USER_UNLOCKED,FallbackHome  finish

public static final String ACTION_USER_UNLOCKED = "android.intent.action.USER_UNLOCKED";

ActivityManager: User 0 state changed from RUNNING_UNLOCKING to RUNNING_UNLOCKED

 

ActivityManager: startHomeActivityLocked ,reason= noMoreActivities resumeHomeStackTask:0:0

ActivityManager: START u0 {act=android.intent.action.MAIN cat=[android.intent.category.HOME] flg=0x10000100 cmp=com.android.launcher3/.Launcher} from uid 0

 

启动launcher 堆栈:

06-24 16:35:15.189   913  1445 E ActivityManager:     at com.android.server.am.ActivityManagerService.startHomeActivityLocked(ActivityManagerService.java:5148)
06-24 16:35:15.189   913  1445 E ActivityManager:     at com.android.server.am.ActivityStackSupervisor.resumeHomeStackTask(ActivityStackSupervisor.java:787)
06-24 16:35:15.189   913  1445 E ActivityManager:     at com.android.server.am.ActivityStack.resumeTopActivityInNextFocusableStack(ActivityStack.java:2834)
06-24 16:35:15.189   913  1445 E ActivityManager:     at com.android.server.am.ActivityStack.resumeTopActivityInnerLocked(ActivityStack.java:2409)
06-24 16:35:15.189   913  1445 E ActivityManager:     at com.android.server.am.ActivityStack.resumeTopActivityUncheckedLocked(ActivityStack.java:2344)
06-24 16:35:15.189   913  1445 E ActivityManager:     at com.android.server.am.ActivityStackSupervisor.resumeFocusedStackTopActivityLocked(ActivityStackSupervisor.java:2289)
06-24 16:35:15.189   913  1445 E ActivityManager:     at com.android.server.am.ActivityStackSupervisor.resumeFocusedStackTopActivityLocked(ActivityStackSupervisor.java:2273)
06-24 16:35:15.189   913  1445 E ActivityManager:     at com.android.server.am.ActivityStack.finishCurrentActivityLocked(ActivityStack.java:3924)
06-24 16:35:15.189   913  1445 E ActivityManager:     at com.android.server.am.ActivityStack.completePauseLocked(ActivityStack.java:1594)
06-24 16:35:15.189   913  1445 E ActivityManager:     at com.android.server.am.ActivityStack.activityPausedLocked(ActivityStack.java:1554)
06-24 16:35:15.189   913  1445 E ActivityManager:     at com.android.server.am.ActivityManagerService.activityPaused(ActivityManagerService.java:8853)
06-24 16:35:15.189   913  1445 E ActivityManager:     at android.app.IActivityManager$Stub.onTransact(IActivityManager.java:224)
06-24 16:35:15.189   913  1445 E ActivityManager:     at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:3692)
06-24 16:35:15.189   913  1445 E ActivityManager:     at android.os.Binder.execTransact(Binder.java:756)

 

 

FDE

[ro.crypto.state]: [encrypted]
[ro.crypto.type]: [block]

[vold.decrypt]: [trigger_restart_framework]

FBE

[ro.crypto.state]: [encrypted]
[ro.crypto.type]: [file]

 

FBE launcher 是在解锁后启动

FDE launcher 是在解锁前启动

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值