在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个回答

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

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

lifei396069574
啊啊啊飞 求助 大神 怎么解决的这个问题
一年多之前 回复
qq_27744449
zane-liu 回复不知取啥名: 你在手机方案公司?同行
大约 3 年之前 回复
shj0605010318
不知取啥名 具体我也不太清楚,刚入门的小白,哈哈
3 年多之前 回复

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

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

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
uiautomator android21以下启动apk
uiautomator在android api21以下如何启动apk,进行自动化测试
ADB启动APK
ADB启动APK 获取应用列表 adb shell dumpsys package > package.txt 在package.txt查找自己需要启动的包名,及main activity,如 com.androlua.compass/com.androlua.Main 找到之后用adb shell am start -n启动 adb shell am start -n co...
adb 启动某个apk
有时候需要用apk来启动某个apk adb shell am start -n com.android.launcher3/com.android.launcher3.Launcher   具体查看~ /rk3399_7in1/packages/apps/Launcher3/AndroidManifest.xml
Android:adb启动及失败
adb启动 当我们通过idea、Android Studio开发Android应用时,发现点击run没有反应,(下了豌豆荚或者其他手机助手,手机也调了开发者模式)显示no connected devices,或者ADB server didn’t ACK,这通常adb进程没有开启。 点击AVD Manager即可启动 adb有时候需要kill掉以后重启,链接机子的时候,DDMS会显...
adb shell命令
adb sehll的命令,world格式,在Android开发中经常要用,很实用的命令
Android中常用的adb shell命令
注意事项:这里写的命令,网页会重新编辑格式,比如我写了两个减号,发布后变成了一个减号;如果我说的命令不能正确执行,请手动输入命令,切记切换英文状态。 android 常用shell命令记录下来备忘设置adb环境变量其实就是将adb.exe的路径放到Path中,目的是cmd直接可以使用adb命令 比如我的adb.exe路径G:\tools\adt-bundle\sdk\platform-tools
通过包名启动apk
笔记
Ubuntu 下 通过ADB 安装Apk和导出手机中的Apk
一、连接电脑 首先确保你的手机打开了调试模式然后输入命令 adb devices root@lvi166-CN15S:/home/lvi166# adb devices List of devices attached ce10171a39a990c00b7e device 如果连接成功则会出现你的设备 二、确认你要导出的apk包名 root@lvi166-CN15S:/hom...
Android 启动adb失败的解决方法
调试的时候,提示 adb server is out of date.killing... ADB server didn`t ACK * failed to start daemon 一开始的按照网上的方法进行一步一步查找问题所在的地方 一、首先是看看自己有没有打开什么豌豆荚之类的手机助手,或者360安全卫士之类的。如果有,就一个个都关掉。 二、如果我们把手机助手或者安全卫士
通过adb shell命令查看当前与用户交互的activity
转自 https://www.baidu.com/link?url=9L7tfIX-72afs_NnJrKHrmiOEQ7UL7Tosu2fbE_Ik7E7wgO7mbVvsewbUd13CS97WxXLOGi1Uq6N73AYmaav3qpwL6EvL6G_WkqZD8QckbK&wd=&eqid=e1a14c42000128fb000000065c48240d   在做an...
Android UiAutomator: 从apk中启动实现方法
UiAutomator 脚本启动通常是通过PC执行一条adb命令来实现的,实现简单,官方的指导文档也是这么写的;然而缺点启动要依赖PC,同时又占用手机的USB端口。 这里讲的是通过Android app中启动UiAutomator 脚本。
adb shell命令整理之input
这个命令可以向 Android 设备发送按键事件,其源码 Input.java adb shell input text test123456 --发送文本内容,不能发送中文 adb shell input keyevent KEYCODE_HOME --发送按键事件,KeyEvent.java --模拟按下 Home 键 ,源码里面有定义: --public static final int
C#执行adb shell命令
最近的工作是Android驱动开发,时常需要使用adb shell命令来查询节点下面的很多信息 首先所有的adb shell命令是以ArrayList的格式传入的,查询的结果也是以ArrayList的形式扔出去的 其次C#实际上是调用本地系统应用实现的adb shell命令的执行,所以我们最好的是使用process这个类来实现 最后确保的是adb工具在C:\Windows目录下面
关于adb shell命令的一些问题
我的手机可以真机调试rn 但是在ADB DEVICES命令下显示rnadb server is out of date. killing ...rn*daemon started successfullyrnList of devices attached rn显示不出具体的设备rnrn而且有时候执行ADB SHELL时 成功的话就显示这个rnadb server is out of date. killing ...rn*daemon started successfullyrn没成功就显示NO DEVICE rn甚至会出现第一次SUCCESSFULLY 在DDMS上也能找到 第二次又NO DEVICE了 然后就找不到了 不明白到底是什么原因rnrn我手机没有ROOT 是因为这个原因吗 ? 不太想ROOT 另外问一下大家有没有什么模拟器推荐 - - 谢谢rn
adb shell命令整理之pm
Package Manager , 可以用获取到一些安装在 Android 设备上得应用信息 pm 的源码 Pm.java , 直接运行 adb shell pm 可以获取到该命令的帮助信息 adb shell pm list package --列出安装在设备上应用的包名,不带任何选项 adb shell pm list package -s -s:列出系统应用 adb sh
Android开发工具—adb shell命令
12.adb shell 进入shell模式,可在手机里执行shell命令 13.adb shell shellCommand 不进入shell模式,直接执行shellCommand指令,如adb shell ls 14.adb shell am start -n com.example.test/.Helloworld 启动包名为com.example.test的应用入口activit
关于adb shell命令
我使用 adb pull A B的时候用遇到问题了:rn是不是B中一定要建立和A匹配的文件个数
adb shell命令问题
记得以前输入adb shell,就可以看到用户名和所在路径的,为嘛现在就只是显示个#,哪位大神知道的说下,网上搜不到,我也不知道啥回事。rn[img=https://img-bbs.csdn.net/upload/201611/29/1480358803_51680.png][/img]
PowCMD客户端 adb shell命令
adb shell logcat -s *:W 可以打印设备的所有过滤信息。但是,打印的好多信息,与现在调试的程序无关。 想问一下:rnPowCMD是否可以根据进程来过滤设备的打印信息
怎么进入到adb shell命令
运行 cmd 找到adb.exe的安装目录 adb.exe的安装目录在sdk的platform-tools下 如我的adb.exe的安装目录为: D:\BaiduNetdiskDownload\android sdk_4_5_6\platform-tools 那么进入方法为 进入目录后 输入adb shell在adb和shell之间有一个空格,之后就可以输入adb shel
adb命令和adb shell命令
本文仅是收集了一些简单粗暴常用的命令,请Linux熟客和大牛勿喷~~ 一。ADB ADB的全称为Android Debug Bridge,字面意思就是安卓调试桥,ADB是一个“客户端-服务器端“的关联程序, 其中客户端是你用来操作的电脑, 服务器端是android设备.ADB是android sdk里的一个工具,用这个工具可以直接操作管理android模拟器或者真实的andriod设备
在adb中通过命令启动设置
进入adb后输入如下: am start com.android.settings/com.android.settings.Settings
通过adb命令行启动应用程序
$adb shell am start -n <package>/<package>.<activity>
mac下启动adb并安装apk
1.先打开你的终端2.在终端下输入以下命令 echo $HOME(进入宿主目录(HOME)) touch .bash_profile(创建 .bash_profile文件) open -e .bash_profile(打开.bash_profile文件) 3、打开该文件后 输入1.exportPATH=${PATH}:/Users/chenmowen/Library/Android/sdk/plat
Android adb常用命令:shell命令与非shell命令
在Android开发过程中,为了开发效率和解决一些奇葩问题,经常需要使用到ADB命令,比如需要快速查看应用的内存占用情况,快速安装或卸载一个应用,截屏录屏等功能,因此下面整理了一些常用的adb命令集合和每个指令具体用法。 ADB命令分类:adb命令分为“shell命令”和 “非shell命令”。 shell命令:在运行具体指令操作之前需先运行“adb shell”。 ...
APK中启动另一个APK
一、在apk启动另一个apk1、定义一个open方法 public void OpenApkOnclick() { openPackage( "com.youxihui.wzsc" ); }2、 void openPackage( string pkgName ) { using( AndroidJavaClass jcPlayer =...
如何通过adb来给模拟器安装apk
1.启动模拟器   2.为了方便,我们应将要安装的apk直接拷到platform-tools所在的目录下,然后在doc下   输入: adb install RootExplorer.apk     adb install <要安装的apk的路径> 格式如:   adb install E:/RootExplorer.apk   稍等片刻 会提示success...
通过adb安装APK到android设备
一、打开命令行,输入 adb install apk路径/apk名称。 例如:adb install /home/android-cts-verifier/CtsVerifier.apk 二、打开命令行,先进入apk所在目录,然后输入:adb install apk名称 例如:cd home/android-cts-verifier/             adb install
Mac本配置adb环境,通过adb安装apk。
配置环境 1、打开终端。 2、echo $HOME,进入目录。 3、touch .bash_profile,创建.bash_profile。 4、open -e .bash_profile,打开.bash_profile。 5、编辑.bash_profile文件内容。 打开.bash_profile后,输入sdk的platform-tools和tools的绝对路径,保存并关...
android 通过命令行启动Apk
Camera(照相机)的启动方法为: # am start -n com.android.camera/com.android.camera.Camera    Browser(浏览器)的启动方法为: # am start -n com.android.browser/com.android.browser.BrowserActivity    启动浏览
uiautomator+脱离PC运行(apk启动uiautomator)的实现方案
终于搞出来了。美滋滋!附上代码:https://download.csdn.net/download/u013247461/10801027 效果: 打开MyUIautomatorTest.apk,点击run uiautomator 按钮,就能直接运行你的脚本。 方案概述: 新建一个Android app工程MyUIautomatorTest,在Activity中添加Button,用于启动...
命令模式下启动uiautomator测试类
默认情况下,用as创建完项目后,会有这3部分组成 同时app目录下的build.gradle文件多了这些东西 今天介绍的uiautomator是属于自动化测试部分的,uiautomator可以实现跨应用间的UI自动化操作(例如点击,滑动,输入内容等等)关于自动化代码的编写,这里不详细介绍. 要使用uiautomator,还需要引入依赖包 androidTestCompile 'com.andr...
启动和关闭ADB服务失败的解决办法
开发平台:windows 在使用一段时间后,adb可能会出现连接不上的问题,这个时候就需要重启adb来解决了,今天重启时出现了重启失败的情况 解决办法: 实际非常简单,主要是adb驻在系统进程的缘故,直接在任务管理中关闭adb服务,再去cmd中操作即可。 如下:
Android在启动adb时失败解决方案?
来源:http://www.hxstrive.com/article/37.htm       今天在开发Android时启动adb时遇见了这个问题。因为我更新了最新的adt出现ADB server didn't ACK, failed to start daemon 然后你想启动一个程序这个时候又会出现 Please ensure that adb is correctly loca...
Python之使用adb shell命令启动应用
Python学习之adb shell启动应用
android执行adb shell命令源码
android执行adb shell命令源码,亲测可用!
网页中启动apk
1、在AndroidManifest.xml的主activity中添加<intent-filter> <action android:name="android.intent.action.VIEW"/> <category android:name="android.intent.category.DEFAULT" /> ...
Android开发工具—adb shell命令—dumpsys
查找当前应用activity方法 1 、cmd窗口中执行“adb logcat -v time -s ActivityManager > d:\log.txt” 抓logcat ,进入相应的activity  logcat 将信息保存在D盘log.txt文件中 2、self.driver.current_activity(appium方法) 3、adb shell dumpsys windo
安装APK错误码-ADB
安装APK的错误码,定义在Android源码中的这个文件中: frameworks\base\core\Java\android\content\pm\PackageManager.java 参考链接 http://blog.csdn.net/gaojinshan/article/details/7954680 /** * Installation return cod
Adb shell命令打电话测试4G
h1 { margin-bottom: 0.08in; }h1.western { font-family: "Liberation Serif",serif; }h1.cjk { font-family: "Noto Sans CJK SC Regular"; font-size: 24pt; }h1.ctl { font-family: "Noto Sans CJK SC Regular";
相关热词 c#入门推荐书 c# 解码海康数据流 c# xml的遍历循环 c# 取 查看源码没有的 c#解决高并发 委托 c#日期转化为字符串 c# 显示问号 c# 字典对象池 c#5.0 安装程序 c# 分页算法