2 shj0605010318 shj0605010318 于 2015.06.01 14:35 提问

在APK中通过adb shell命令启动UIautomator失败

源码如下:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_main);
Button stButton = (Button)findViewById(R.id.start_test);
stButton.setOnClickListener(new OnClickListener() {

                    @Override
                    public void onClick(View v) {
                            // TODO Auto-generated method stub
                            try {
                                    Process pro = Runtime
                                                    .getRuntime()
                                                    .exec("uiautomator runtest TestHiDP.jar -c com.huawei.cases.TestAllCase");
                            } catch (Exception e) {
                                    // TODO Auto-generated catch block
                                    e.printStackTrace();
                            }
                    }
            });

    }

报错信息为:
12-03 08:17:24.452: E/UiAutomatorTestRunner(6046): java.lang.RuntimeException: Didn't find class "com.huawei.cases.TestAllCase" on path: DexPathList[[zip file "/system/framework/android.test.runner.jar", zip file "/system/framework/uiautomator.jar", zip file "/data/local/tmp/TestHiDP.jar"],nativeLibraryDirectories=[/vendor/lib, /system/lib]]
12-03 08:17:24.452: E/UiAutomatorTestRunner(6046): Caused by: java.lang.ClassNotFoundException: Didn't find class "com.huawei.cases.TestAllCase" on path: DexPathList[[zip file "/system/framework/android.test.runner.jar", zip file "/system/framework/uiautomator.jar", zip file "/data/local/tmp/TestHiDP.jar"],nativeLibraryDirectories=[/vendor/lib, /system/lib]]

我在pc端输入“adb shell uiautomator runtest TestHiDP.jar -c com.huawei.cases.TestAllCase”是可以正常启动的。
手机端的APK有android:sharedUserId="android.uid.system",使用的是系统签名。在android 4.0的高通平台手机上可以运行,在MTK某些平台的手机上运行不了。在android 5.0上就都运行不了了。请大神帮忙看看
是不是权限,还是什么问题?

5个回答

shj0605010318
shj0605010318   2015.06.12 11:23

这个问题折腾了这么久,我这里把原因贴出来,供大家分享,有错误的地方也请大家指正。
通过apk启动Uiautomator,在android 4.4可以,而5.0不可用,是因为我的apk使用的是systemId,在4.4上没有对用户权限进行限制。而5.0上强制开启了SELinux,这样对systemID的访问权限就限制了,因为/data/local/tmp目录的用户和属组是shell:shell,所以解决方法是,把APK改成shellID进行访问,就好了

u010312480
u010312480   2015.06.01 20:58

错误信息里提示运行时并未找到该类,所以应该是版本的问题,可能不同手机平台的安卓版本移除了一些包。

qq_27744449
qq_27744449 回复不知取啥名: 你在手机方案公司?同行
一年多之前 回复
shj0605010318
shj0605010318 具体我也不太清楚,刚入门的小白,哈哈
一年多之前 回复
u010250777
u010250777   2016.05.11 09:36

你好LZ我这几天也在做这个东西,遇到了同样的问题,我对你的回复有一些疑问,“把APK改成shellID进行访问,就好了”shellID这个是什么?是我已通过adb shell进去后得到的这个吗?root@cancro:/ # ,还有是在manifest文件中修改apk改成shellID吗?能把你的这个修改的代码给个参考吗?,谢谢,另外我这边使用的是小米手机还报了一些虚拟机权限的问题,
Could not create image space with image file '/system/framework/boot.art'. Attempting to fall back to imageless running. Error was: Requiring relocation for image '/system/framework/boot.art' at '/system/framework/arm/boot.art' but we do not have any dalvik_cache to find/place it in.
No pending exception expected: java.lang.ClassNotFoundException: Didn't find class "com.android.commands.uiautomator.Launcher" on path: DexPathList[[zip file "/system/framework/android.test.runner.jar", zip file "/system/framework/uiautomator.jar", zip file "/data/local/tmp/UiautomatorFunction.jar"],nativeLibraryDirectories=[/vendor/lib, /system/lib]]

之类的东西,我和你一样直接使用adb shell uiautomator是没有问题的,4.4.4的小米也没问题我怀疑是apk中调用的uiautomator和直接adb shell调用的不是一个,默认是不是/system/bin
希望能尽快得到你的恢复,谢谢

kobe90yuan
kobe90yuan 回复不知取啥名: 求工号,也遇到这个问题了
一年多之前 回复
shj0605010318
shj0605010318 还有是在manifest文件中修改apk改成shellID吗?——对的,就是这样改的,然后还要用shellID对应的key文件(这个是开发提供的),另外开发编译版本把我们的APK也内置到手机版本,赋予shell用户权限。另外,不好意思,公司的代码不能外传,上不了外网。
一年多之前 回复
shj0605010318
shj0605010318 不好意思,最近都没有上论坛。今天才看到消息,shellID就是要有shell权限的属组和权限。因为我们测试的是自己公司的手机。我们在开发测试版本时,给我们的测试工具APK赋予了shell用户权限,这样就这个apk就可以启动uiautomator脚本程序了。其他公司的手机,即使root了,也还是不行。需要开发在编译版本对测试APK的权限进行修改。
一年多之前 回复
qq_27836539
qq_27836539   2016.10.13 16:32

以前我也遇到了,android:sharedUserId="android.uid.system"权限改下android:sharedUserId="android.uid.shell"即可。

u011317090
u011317090   2017.10.06 14:07
Csdn user default icon
上传中...
上传图片
插入图片