CTS测试UserManagerment失败

junit.framework.AssertionFailedError: com.google.android.xts.deviceowner.UserManagementTest failed.
at junit.framework.Assert.fail(Assert.java:50)
at junit.framework.Assert.assertTrue(Assert.java:20)
at com.google.android.xts.devicepolicy.DeviceOwnerTest.executeDeviceOwnerTest(DeviceOwnerTest.java:155)
at com.google.android.xts.devicepolicy.DeviceOwnerTest.testUserManagement(DeviceOwnerTest.java:119)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at junit.framework.TestCase.runTest(TestCase.java:168)
at junit.framework.TestCase.runBare(TestCase.java:134)
at com.android.tradefed.testtype.DeviceTestResult$1.protect(DeviceTestResult.java:81)
at com.android.tradefed.testtype.DeviceTestResult.runProtected(DeviceTestResult.java:56)
at com.android.tradefed.testtype.DeviceTestResult.run(DeviceTestResult.java:85)
at junit.framework.TestCase.run(TestCase.java:124)
at com.android.tradefed.testtype.DeviceTestCase.run(DeviceTestCase.java:117)
at com.android.xts.tradefed.testtype.JarHostTest$TestRunnable.run(JarHostTest.java:261)
at com.android.tradefed.util.RunUtil$RunnableNotifier.run(RunUtil.java:378)


03-28 11:57:08.095 I/art     (26318): Explicit concurrent mark sweep GC freed 46(1872B) AllocSpace objects, 0(0B) LOS objects, 39% free, 1994KB/3MB, paused 444us total 22.660ms
03-28 11:57:08.096 I/TestRunner(26318): failed: testCreateAndInitializeUser(com.google.android.xts.deviceowner.UserManagementTest)
03-28 11:57:08.096 I/TestRunner(26318): ----- begin exception -----
03-28 11:57:08.097 D/SettingsInterface( 2267):  from settings cache , name = multi_sim_data_call , value = null
03-28 11:57:08.099 D/SettingsInterface( 2267):  from settings cache , name = multi_sim_data_call , value = null
03-28 11:57:08.101 I/TestRunner(26318): 
03-28 11:57:08.101 I/TestRunner(26318): junit.framework.AssertionFailedError
03-28 11:57:08.101 I/TestRunner(26318): at junit.framework.Assert.fail(Assert.java:48)
03-28 11:57:08.101 I/TestRunner(26318): at junit.framework.Assert.assertTrue(Assert.java:20)
03-28 11:57:08.101 I/TestRunner(26318): at junit.framework.Assert.assertTrue(Assert.java:27)
03-28 11:57:08.101 I/TestRunner(26318): at com.google.android.xts.deviceowner.UserManagementTest.testCreateAndInitializeUser(UserManagementTest.java:102)
03-28 11:57:08.101 I/TestRunner(26318): at java.lang.reflect.Method.invoke(Native Method)
03-28 11:57:08.101 I/TestRunner(26318): at android.test.InstrumentationTestCase.runMethod(InstrumentationTestCase.java:214)
03-28 11:57:08.101 I/TestRunner(26318): at android.test.InstrumentationTestCase.runTest(InstrumentationTestCase.java:199)
03-28 11:57:08.101 I/TestRunner(26318): at junit.framework.TestCase.runBare(TestCase.java:134)
03-28 11:57:08.101 I/TestRunner(26318): at junit.framework.TestResult$1.protect(TestResult.java:115)
03-28 11:57:08.101 I/TestRunner(26318): at junit.framework.TestResult.runProtected(TestResult.java:133)
03-28 11:57:08.101 I/TestRunner(26318): at junit.framework.TestResult.run(TestResult.java:118)
03-28 11:57:08.101 I/TestRunner(26318): at junit.framework.TestCase.run(TestCase.java:124)
03-28 11:57:08.101 I/TestRunner(26318): at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:191)
03-28 11:57:08.101 I/TestRunner(26318): at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:176)
03-28 11:57:08.101 I/TestRunner(26318): at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:555)
03-28 11:57:08.101 I/TestRunner(26318): at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1893)
03-28 11:57:08.101 I/TestRunner(26318): ----- end exception -----


    public void testCreateAndRemoveUser() {
        return;
        UserManager userManager = (UserManager)mContext.getSystemService("user");
        assertEquals("Must start test with 1 user", 0x1, userManager.getUserCount());
        mUserHandle = mDevicePolicyManager.createUser(getWho(), "Test User");
        assertNotNull(mUserHandle);
        assertEquals(0x2, userManager.getUserCount());
        assertTrue(mDevicePolicyManager.removeUser(getWho(), mUserHandle));
        assertEquals(0x1, userManager.getUserCount());
        mUserHandle = 0x0;
    }
    
    public void testCreateAndInitializeUser() {
        // :( Parsing error. Please contact me.
    }


    
    .method public testCreateAndInitializeUser()V
    .locals 11


    .prologue
    const/4 v2, 0x1


    .line 65
    iget-object v0, p0, Lcom/google/android/xts/deviceowner/UserManagementTest;->mPackageManager:Landroid/content/pm/PackageManager;


    const-string/jumbo v1, "android.software.managed_users"


    invoke-virtual {v0, v1}, Landroid/content/pm/PackageManager;->hasSystemFeature(Ljava/lang/String;)Z


    move-result v0 //前面调用函数后,把结果放到 v0


    if-nez v0, :cond_0 //如果结果不为0,就跳转到cond_0标号处
    
    //网上有百度的修改方案拿掉handheld_core_hardware.xml里的android.software.managed_users此处代码就能看出,拿掉这个就不做如下的判断了,直接返回了,所以通过


    .line 66
    return-void


    .line 69
    :cond_0
    iget-object v0, p0, Lcom/google/android/xts/deviceowner/UserManagementTest;->mContext:Landroid/content/Context;//获取UserManagementTest的context


    const-string/jumbo v1, "user" //v1=user


    invoke-virtual {v0, v1}, Landroid/content/Context;->getSystemService(Ljava/lang/String;)Ljava/lang/Object;
//Context.getSystemService("user");
    move-result-object v10
//将上一个invoke类型指令操作的对象结果(返回值)赋给v0
    check-cast v10, Landroid/os/UserManager;
//将v10寄存器中的对象引用转化成指定的类型(这里是 UserManager)
    .line 70
    .local v10, "userManager":Landroid/os/UserManager;
    const-string/jumbo v0, "Must start test with 1 user"
//        UserManager userManager = (UserManager)mContext.getSystemService("user");
//        assertEquals("Must start test with 1 user", 0x1, userManager.getUserCount());
    invoke-virtual {v10}, Landroid/os/UserManager;->getUserCount()I


    move-result v1


    invoke-static {v0, v2, v1}, Lcom/google/android/xts/deviceowner/UserManagementTest;->assertEquals(Ljava/lang/String;II)V
//assertEquals(0x1, userManager.getUserCount());
    .line 72
    const-string/jumbo v6, "com.google.xts.TEST_USER_ACTION"
//v6="com.google.xts.TEST_USER_ACTION"
    .line 73
    .local v6, "action":Ljava/lang/String;
    new-instance v5, Landroid/os/Bundle;


    invoke-direct {v5}, Landroid/os/Bundle;-><init>()V
//Bundle bundle = new Bundle(); 
//bundle.putString("action", "com.google.xts.TEST_USER_ACTION"); 
    .line 74
    .local v5, "bundle":Landroid/os/Bundle;
    const-string/jumbo v0, "broadcastExtra"


    invoke-virtual {v5, v0, v2}, Landroid/os/Bundle;->putBoolean(Ljava/lang/String;Z)V
//bundle.putBoolean("broadcastExtra", 0x1);
    .line 75
    const-string/jumbo v0, "serialExtra"


    invoke-static {}, Landroid/os/Process;->myUserHandle()Landroid/os/UserHandle;


    move-result-object v1


    invoke-virtual {v10, v1}, Landroid/os/UserManager;->getSerialNumberForUser(Landroid/os/UserHandle;)J


    move-result-wide v2


    invoke-virtual {v5, v0, v2, v3}, Landroid/os/Bundle;->putLong(Ljava/lang/String;J)V
//v1=mUserHandle=myUserHandle();
//v2=userManager.getSerialNumberForUser(mUserHandle);
//bundle.putLong("serialExtra", 0x1,userManager.getSerialNumberForUser(mUserHandle),);
    .line 76
    const-string/jumbo v0, "actionExtra"


    invoke-virtual {v5, v0, v6}, Landroid/os/Bundle;->putString(Ljava/lang/String;Ljava/lang/String;)V
//bundle.putString("actionExtra", "com.google.xts.TEST_USER_ACTION");
    .line 78
    new-instance v8, Landroid/content/IntentFilter;


    invoke-direct {v8}, Landroid/content/IntentFilter;-><init>()V
//IntentFilter intentfilter=new IntentFilter();
    .line 79
    .local v8, "filter":Landroid/content/IntentFilter;
    invoke-virtual {v8, v6}, Landroid/content/IntentFilter;->addAction(Ljava/lang/String;)V
//intentfilter.addAction("com.google.xts.TEST_USER_ACTION");
    .line 80
    new-instance v9, Lcom/google/android/xts/deviceowner/UserManagementTest$1;


    invoke-direct {v9, p0}, Lcom/google/android/xts/deviceowner/UserManagementTest$1;-><init>(Lcom/google/android/xts/deviceowner/UserManagementTest;)V
//新建一个子类BroadcastReceiver "receiver" = new BroadcastReceiver()
    .line 89
    .local v9, "receiver":Landroid/content/BroadcastReceiver;
    const/4 v0, 0x0


    iput-boolean v0, p0, Lcom/google/android/xts/deviceowner/UserManagementTest;->mReceived:Z


    //boolean mReceived = mDevicePolicyManager.removeUser(getWho(), mUserHandle);


    .line 90
    iget-object v0, p0, Lcom/google/android/xts/deviceowner/UserManagementTest;->mContext:Landroid/content/Context;


    invoke-virtual {v0, v9, v8}, Landroid/content/Context;->registerReceiver(Landroid/content/BroadcastReceiver;Landroid/content/IntentFilter;)Landroid/content/Intent;
//registerReceiver("receiver",intentfilter);
    .line 92
    monitor-enter p0


    .line 93
    :try_start_0
    iget-object v0, p0, Lcom/google/android/xts/deviceowner/UserManagementTest;->mDevicePolicyManager:Landroid/app/admin/DevicePolicyManager;


    invoke-static {}, Lcom/google/android/xts/deviceowner/UserManagementTest;->getWho()Landroid/content/ComponentName;


    move-result-object v1


    const-string/jumbo v2, "Test User"


    .line 94
    const-string/jumbo v3, "Test Profile Owner"


    invoke-static {}, Lcom/google/android/xts/deviceowner/UserManagementTest;->getWho()Landroid/content/ComponentName;


    move-result-object v4


    .line 93
    invoke-virtual/range {v0 .. v5}, Landroid/app/admin/DevicePolicyManager;->createAndInitializeUser(Landroid/content/ComponentName;Ljava/lang/String;Ljava/lang/String;Landroid/content/ComponentName;Landroid/os/Bundle;)Landroid/os/UserHandle;


    move-result-object v0


    iput-object v0, p0, Lcom/google/android/xts/deviceowner/UserManagementTest;->mUserHandle:Landroid/os/UserHandle;
//mUserHandle = mDevicePolicyManager.createAndInitializeUser(getWho(), "Test User","Test Profile Owner",getWho(),bundle);
    .line 95
    iget-object v0, p0, Lcom/google/android/xts/deviceowner/UserManagementTest;->mUserHandle:Landroid/os/UserHandle;


    invoke-static {v0}, Lcom/google/android/xts/deviceowner/UserManagementTest;->assertNotNull(Ljava/lang/Object;)V
    :try_end_0
    .catchall {:try_start_0 .. :try_end_0} :catchall_0
//assertNotNull(mUserHandle);
    .line 99
    const-wide/16 v0, 0x4e20
//转换为16进制毫秒数v0=20000;20s
    :try_start_1
    invoke-virtual {p0, v0, v1}, Lcom/google/android/xts/deviceowner/UserManagementTest;->wait(J)V
    :try_end_1
    .catch Ljava/lang/InterruptedException; {:try_start_1 .. :try_end_1} :catch_0
    .catchall {:try_start_1 .. :try_end_1} :catchall_0
//UserManagementTest.wait(20s);
    .line 102
    :goto_0
    :try_start_2
    iget-boolean v0, p0, Lcom/google/android/xts/deviceowner/UserManagementTest;->mReceived:Z


    invoke-static {v0}, Lcom/google/android/xts/deviceowner/UserManagementTest;->assertTrue(Z)V
//assertTrue(UserManagementTest.mReceived);
    .line 103
    invoke-virtual {v10}, Landroid/os/UserManager;->getUserCount()I


    move-result v0


    const/4 v1, 0x2


    invoke-static {v1, v0}, Lcom/google/android/xts/deviceowner/UserManagementTest;->assertEquals(II)V
//assertEquals(0x2, userManager.getUserCount());
    .line 105
    iget-object v0, p0, Lcom/google/android/xts/deviceowner/UserManagementTest;->mDevicePolicyManager:Landroid/app/admin/DevicePolicyManager;


    invoke-static {}, Lcom/google/android/xts/deviceowner/UserManagementTest;->getWho()Landroid/content/ComponentName;


    move-result-object v1


    iget-object v2, p0, Lcom/google/android/xts/deviceowner/UserManagementTest;->mUserHandle:Landroid/os/UserHandle;


    invoke-virtual {v0, v1, v2}, Landroid/app/admin/DevicePolicyManager;->removeUser(Landroid/content/ComponentName;Landroid/os/UserHandle;)Z


    move-result v0


    invoke-static {v0}, Lcom/google/android/xts/deviceowner/UserManagementTest;->assertTrue(Z)V
//assertTrue(mDevicePolicyManager.removeUser(getWho(), mUserHandle));
    .line 106
    invoke-virtual {v10}, Landroid/os/UserManager;->getUserCount()I


    move-result v0


    const/4 v1, 0x1


    invoke-static {v1, v0}, Lcom/google/android/xts/deviceowner/UserManagementTest;->assertEquals(II)V
//assertEquals(0x1, userManager.getUserCount());
    .line 107
    const/4 v0, 0x0


    iput-object v0, p0, Lcom/google/android/xts/deviceowner/UserManagementTest;->mUserHandle:Landroid/os/UserHandle;
    :try_end_2
    .catchall {:try_start_2 .. :try_end_2} :catchall_0


    monitor-exit p0


    .line 109
    iget-object v0, p0, Lcom/google/android/xts/deviceowner/UserManagementTest;->mContext:Landroid/content/Context;


    invoke-virtual {v0, v9}, Landroid/content/Context;->unregisterReceiver(Landroid/content/BroadcastReceiver;)V


    .line 62
    return-void


    .line 100
    :catch_0
    move-exception v7


    .local v7, "e":Ljava/lang/InterruptedException;
    goto :goto_0


    .line 92
    .end local v7    # "e":Ljava/lang/InterruptedException;
    :catchall_0
    move-exception v0


    monitor-exit p0


    throw v0
.end method


createAndInitializeUser


Activity和Broadcast行为不正常时 ,如何抓取log? 
[DESCRIPTION] Activity和Broadcast行为不正常时,如何抓取log? [SOLUTION] 1) 
???请使用mtklog抓取,保证有main log和event log产生 2) ??? 对于activity行为不正常,
请打开activity的log开关再抓取: ?? adb shell dumpsys activity log a on 这个命令只
对当次开机有效 3) ???对于broadcast行为不正常,请打开broadcast的log开关再抓取: 
adb shell dumpsys activity log br on 这个命令只对当次开机有效 


adb shell am start -n com.mediatek.mtklogger/com.mediatek.mtklogger.MainActivity




贵司可以可以尝试修改,将此类Broadcast放在FOREGROUND队列执行就不会排队太久,谢谢!


frameworks/base/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
void sendAdminCommandLocked(ActiveAdmin admin, String action, Bundle adminExtras,
BroadcastReceiver result)
intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND)//add




在log中搜索TEST_USER_ACTION可以看出凑巧通过的是刚好测试wait20s内有
03-29 11:37:35.964  1360  1370 V ActivityManager: Broadcast: Intent { act=com.google.xts.TEST_USER_ACTION flg=0x10 } ordered=false userid=0 callerApp=ProcessRecord{fe6fab8 22521:com.google.android.xts.deviceowner/u22a9}
碰上了这个log就测试通过了


跑了三次,每次测试两次testCreateAndInitializeUser


成功一次,其他五次均失败


从log中可以看出成功的那一次刚好wait的20s内有TEST_USER_ACTION发出即:
03-29 11:37:35.964 1360 1370 V ActivityManager: Broadcast: Intent { act=com.google.xts.TEST_USER_ACTION flg=0x10 } ordered=false userid=0 callerApp=ProcessRecord{fe6fab8 22521:com.google.android.xts.deviceowner/u22a9}


存在于
    Line 76145: 03-29 11:37:29.844 22237 22253 I TestRunner: started: testCreateAndInitializeUser(com.google.android.xts.deviceowner.UserManagementTest)
    Line 88712: 03-29 11:37:50.844 22237 22253 I TestRunner: finished: testCreateAndInitializeUser(com.google.android.xts.deviceowner.UserManagementTest)
    Line 88713: 03-29 11:37:50.845 22237 22253 I TestRunner: passed: testCreateAndInitializeUser(com.google.android.xts.deviceowner.UserManagementTest)
    
此测试项时间之间,所以测试通过


而其他的失败5次,有还未测试到testCreateAndInitializeUser,广播已经发送的
也有测试到testCreateAndInitializeUser,广播还未发送的


如此可以确定intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND)//add


此项修改是无效的,主要看TEST_USER_ACTION该广播发送和testCreateAndInitializeUser的逻辑时间为何会存在出入? 


每个广播前有如下几个log可以结合代码中的BasicAdminReceiver反编译查看如下


03-29 11:35:33.836 19086 19086 D ActivityThread: BIND_APPLICATION handled : 0 / AppBindData{appInfo=ApplicationInfo{1fa125b com.google.android.xts.deviceowner}}
03-29 11:35:33.837 19086 19086 D ActivityThread: BDC-Calling onReceive: intent=Intent { act=android.app.action.DEVICE_ADMIN_ENABLED flg=0x10 cmp=com.google.android.xts.deviceowner/.BaseDeviceOwnerTest$BasicAdminReceiver }, receiver=com.google.android.xts.deviceowner.BaseDeviceOwnerTest$BasicAdminReceiver@673baf8
03-29 11:35:33.838 19086 19086 D ActivityThread: BDC-RECEIVER handled : 0 / ReceiverData{intent=Intent { act=android.app.action.DEVICE_ADMIN_ENABLED flg=0x10 cmp=com.google.android.xts.deviceowner/.BaseDeviceOwnerTest$BasicAdminReceiver } packageName=com.google.android.xts.deviceowner resultCode=-1 resultData=null resultExtras=null}




if(p2.getBooleanExtra("broadcastExtra", false)) {
Intent "i" = new Intent(p2.getStringExtra("actionExtra"));
"userManager" = p1.getSystemService("user");
long "serial" = p2.getLongExtra("serialExtra", 0x0);
UserHandle "handle" = "userManager".getUserForSerialNumber("serial");
p1.sendBroadcastAsUser("i", "handle");
}


初步判定DEVICE_ADMIN_ENABLED是广播DEVICE_ADMIN_ENABLED携带的actionExtra在BasicAdminReceiver下发出,再看看log进一步确认
DEVICE_ADMIN_ENABLED搜索此广播可以看到,第二次接受到此广播时就会发送TEST_USER_ACTION
六个log都吻合情况
问题log:
11:35:36开始testCreateAndInitializeUser测试
03-29 11:35:36.855 19170 19182 I TestRunner: started: testCreateAndInitializeUser(com.google.android.xts.deviceowner.UserManagementTest)
发送DEVICE_ADMIN_ENABLED广播
03-29 11:35:37.794  1360  1815 V ActivityManager: Broadcast: Intent { act=android.app.action.DEVICE_ADMIN_ENABLED flg=0x10 cmp=com.google.android.xts.deviceowner/.BaseDeviceOwnerTest$BasicAdminReceiver (has extras) } ordered=false userid=19 callerApp=ProcessRecord{2e3f602 1360:system/1000}
但是在接收到DEVICE_ADMIN_ENABLED广播时间29s已经超过20s所以超时
03-29 11:36:06.676 19828 19828 D ActivityThread: BDC-Calling onReceive: intent=Intent { act=android.app.action.DEVICE_ADMIN_ENABLED flg=0x10 cmp=com.google.android.xts.deviceowner/.BaseDeviceOwnerTest$BasicAdminReceiver (has extras) }, receiver=com.google.android.xts.deviceowner.BaseDeviceOwnerTest$BasicAdminReceiver@673baf8
03-29 11:36:06.681 19795 19817 W MediaProvider: queryThumbnail: Null origId! uri=content://media/external/images/thumbnails


正常log:
11:37:29开始testCreateAndInitializeUser测试
03-29 11:37:29.844 22237 22253 I TestRunner: started: testCreateAndInitializeUser(com.google.android.xts.deviceowner.UserManagementTest)
发送DEVICE_ADMIN_ENABLED广播
03-29 11:37:30.636  1360  1808 V ActivityManager: Broadcast: Intent { act=android.app.action.DEVICE_ADMIN_ENABLED flg=0x10 cmp=com.google.android.xts.deviceowner/.BaseDeviceOwnerTest$BasicAdminReceiver (has extras) } ordered=false userid=22 callerApp=ProcessRecord{2e3f602 1360:system/1000}
接收到DEVICE_ADMIN_ENABLED广播7s
Line 84295: 03-29 11:37:35.935 22521 22521 D ActivityThread: BDC-Calling onReceive: intent=Intent { act=android.app.action.DEVICE_ADMIN_ENABLED flg=0x10 cmp=com.google.android.xts.deviceowner/.BaseDeviceOwnerTest$BasicAdminReceiver (has extras) }, receiver=com.google.android.xts.deviceowner.BaseDeviceOwnerTest$BasicAdminReceiver@804a788
Line 84299: 03-29 11:37:35.968 22521 22521 D ActivityThread: BDC-RECEIVER handled : 0 / ReceiverData{intent=Intent { act=android.app.action.DEVICE_ADMIN_ENABLED flg=0x10 cmp=com.google.android.xts.deviceowner/.BaseDeviceOwnerTest$BasicAdminReceiver (has extras) } packageName=com.google.android.xts.deviceowner resultCode=-1 resultData=null resultExtras=null}




114057问题log1:
11:41:56开始testCreateAndInitializeUser测试
03-29 11:41:56.674 25251 25266 I TestRunner: started: testCreateAndInitializeUser(com.google.android.xts.deviceowner.UserManagementTest)
发送DEVICE_ADMIN_ENABLED广播
03-29 11:41:57.575  1360  1815 V ActivityManager: Broadcast: Intent { act=android.app.action.DEVICE_ADMIN_ENABLED flg=0x10 cmp=com.google.android.xts.deviceowner/.BaseDeviceOwnerTest$BasicAdminReceiver (has extras) } ordered=false userid=25 callerApp=ProcessRecord{2e3f602 1360:system/1000}
接收到DEVICE_ADMIN_ENABLED广播29s已经超过20s所以超时
Line 49399: 03-29 11:42:26.538 25974 25974 D ActivityThread: BDC-Calling onReceive: intent=Intent { act=android.app.action.DEVICE_ADMIN_ENABLED flg=0x10 cmp=com.google.android.xts.deviceowner/.BaseDeviceOwnerTest$BasicAdminReceiver (has extras) }, receiver=com.google.android.xts.deviceowner.BaseDeviceOwnerTest$BasicAdminReceiver@673baf8
Line 49405: 03-29 11:42:26.548 25974 25974 D ActivityThread: BDC-RECEIVER handled : 0 / ReceiverData{intent=Intent { act=android.app.action.DEVICE_ADMIN_ENABLED flg=0x10 cmp=com.google.android.xts.deviceowner/.BaseDeviceOwnerTest$BasicAdminReceiver (has extras) } packageName=com.google.android.xts.deviceowner resultCode=-1 resultData=null resultExtras=null}




114057问题log2:
11:43:49开始testCreateAndInitializeUser测试
Line 71900: 03-29 11:43:49.134 28200 28212 I TestRunner: started: testCreateAndInitializeUser(com.google.android.xts.deviceowner.UserManagementTest)
发送DEVICE_ADMIN_ENABLED广播
Line 72963: 03-29 11:43:50.138  1360  2285 V ActivityManager: Broadcast: Intent { act=android.app.action.DEVICE_ADMIN_ENABLED flg=0x10 cmp=com.google.android.xts.deviceowner/.BaseDeviceOwnerTest$BasicAdminReceiver (has extras) } ordered=false userid=28 callerApp=ProcessRecord{2e3f602 1360:system/1000}
接收到DEVICE_ADMIN_ENABLED广播29s已经超过20s所以超时
Line 103664: 03-29 11:44:19.648 28910 28910 D ActivityThread: BDC-Calling onReceive: intent=Intent { act=android.app.action.DEVICE_ADMIN_ENABLED flg=0x10 cmp=com.google.android.xts.deviceowner/.BaseDeviceOwnerTest$BasicAdminReceiver (has extras) }, receiver=com.google.android.xts.deviceowner.BaseDeviceOwnerTest$BasicAdminReceiver@804a788
Line 103671: 03-29 11:44:19.661 28910 28910 D ActivityThread: BDC-RECEIVER handled : 0 / ReceiverData{intent=Intent { act=android.app.action.DEVICE_ADMIN_ENABLED flg=0x10 cmp=com.google.android.xts.deviceowner/.BaseDeviceOwnerTest$BasicAdminReceiver (has extras) } packageName=com.google.android.xts.deviceowner resultCode=-1 resultData=null resultExtras=null}


114458问题log1:
11:45:59开始testCreateAndInitializeUser测试
Line 18904: 03-29 11:45:59.415 31432 31444 I TestRunner: started: testCreateAndInitializeUser(com.google.android.xts.deviceowner.UserManagementTest)
发送DEVICE_ADMIN_ENABLED广播
Line 20480: 03-29 11:46:00.249  1360  1813 V ActivityManager: Broadcast: Intent { act=android.app.action.DEVICE_ADMIN_ENABLED flg=0x10 cmp=com.google.android.xts.deviceowner/.BaseDeviceOwnerTest$BasicAdminReceiver (has extras) } ordered=false userid=31 callerApp=ProcessRecord{2e3f602 1360:system/1000}
接收到DEVICE_ADMIN_ENABLED广播28s已经超过20s所以超时
Line 48829: 03-29 11:46:28.780 32086 32086 D ActivityThread: BDC-Calling onReceive: intent=Intent { act=android.app.action.DEVICE_ADMIN_ENABLED flg=0x10 cmp=com.google.android.xts.deviceowner/.BaseDeviceOwnerTest$BasicAdminReceiver (has extras) }, receiver=com.google.android.xts.deviceowner.BaseDeviceOwnerTest$BasicAdminReceiver@673baf8
Line 48831: 03-29 11:46:28.785 32086 32086 D ActivityThread: BDC-RECEIVER handled : 0 / ReceiverData{intent=Intent { act=android.app.action.DEVICE_ADMIN_ENABLED flg=0x10 cmp=com.google.android.xts.deviceowner/.BaseDeviceOwnerTest$BasicAdminReceiver (has extras) } packageName=com.google.android.xts.deviceowner resultCode=-1 resultData=null resultExtras=null}

114458问题log2:
11:47:44开始testCreateAndInitializeUser测试
Line 69380: 03-29 11:47:44.944  1746  1758 I TestRunner: started: testCreateAndInitializeUser(com.google.android.xts.deviceowner.UserManagementTest)
发送DEVICE_ADMIN_ENABLED广播
Line 71050: 03-29 11:47:45.991  1360  1811 V ActivityManager: Broadcast: Intent { act=android.app.action.DEVICE_ADMIN_ENABLED flg=0x10 cmp=com.google.android.xts.deviceowner/.BaseDeviceOwnerTest$BasicAdminReceiver (has extras) } ordered=false userid=34 callerApp=ProcessRecord{2e3f602 1360:system/1000}
接收到DEVICE_ADMIN_ENABLED广播29s已经超过20s所以超时
Line 103863: 03-29 11:48:15.024  2594  2594 D ActivityThread: BDC-Calling onReceive: intent=Intent { act=android.app.action.DEVICE_ADMIN_ENABLED flg=0x10 cmp=com.google.android.xts.deviceowner/.BaseDeviceOwnerTest$BasicAdminReceiver (has extras) }, receiver=com.google.android.xts.deviceowner.BaseDeviceOwnerTest$BasicAdminReceiver@804a788
Line 103881: 03-29 11:48:15.063  2594  2594 D ActivityThread: BDC-RECEIVER handled : 0 / ReceiverData{intent=Intent { act=android.app.action.DEVICE_ADMIN_ENABLED flg=0x10 cmp=com.google.android.xts.deviceowner/.BaseDeviceOwnerTest$BasicAdminReceiver (has extras) } packageName=com.google.android.xts.deviceowner resultCode=-1 resultData=null resultExtras=null}


在openfork中搜索
DEVICE_ADMIN_ENABLED


可以看到ACTION_DEVICE_ADMIN_ENABLED即代码内的命名
一一查看此接口的使用方法
只有如下这个看着像是发送广播的地方,其他为查询,使能等不一一列举
lenovo_andy/alps/frameworks/base/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java


2013                sendAdminCommandLocked(newAdmin, DeviceAdminReceiver.ACTION_DEVICE_ADMIN_ENABLED,
2014                        onEnableData, null);


继续……
1322    void sendAdminCommandLocked(ActiveAdmin admin, String action, Bundle adminExtras,
1323            BroadcastReceiver result) {
1324        Intent intent = new Intent(action);
1325        intent.setComponent(admin.info.getComponent());
            intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND)//add
1326        if (action.equals(DeviceAdminReceiver.ACTION_PASSWORD_EXPIRING)) {
1327            intent.putExtra("expiration", admin.passwordExpirationDate);
1328        }
1329        if (adminExtras != null) {
1330            intent.putExtras(adminExtras);
1331        }
1332        if (result != null) {
1333            mContext.sendOrderedBroadcastAsUser(intent, admin.getUserHandle(),
1334                    null, result, mHandler, Activity.RESULT_OK, null, null);
1335        } else {
1336            mContext.sendBroadcastAsUser(intent, admin.getUserHandle());
1337        }
1338    }


可以看到发送广播了
至此,这里的测试流程算是理顺了


给此处增加
intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND)//add
应该修改就可以生效了
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值