在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上就都运行不了了。请大神帮忙看看
是不是权限,还是什么问题?

0

5个回答

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

1

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

0
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
希望能尽快得到你的恢复,谢谢

0
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"即可。

0
0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Uiautomator2.0 启动测试命令时传参和取参
在使用Uiautomator2.0过程中,有时候因业务需求,从启动命令中获取即时参数更便于跑测试。nn本文提供Uiautomator2.0(以下简称U2)一个如何从启动命令中传递参数,以及在脚本中如何获取参数。nn nn1、首先看下U2启动命令中的帮助文档提示nnnn(-e 传递的是一个类似键值对的<NAME>和<VALUE>)nn2、所以,我们的启动命令应该是这样:nna...
Android程序中(APK程序)执行Adb shell 命令
APK程序执行Adb shell 命令 shell与高级语言间的调用
uiautomator2.0+脱离PC运行(apk启动uiautomator2.0+)的实现方案
uiautomator2.0+脱离PC运行(apk启动uiautomator2.0+)效果:打开MyTest.apk,点击run uiautomator,就能直接运行你的脚本。方案概述:n新建一个Android app工程MyTest,在Activity中添加Button,用于启动脚本n给这个app添加系统签名n在MyTest中新建一个module,命名为MyTestCase,用于编写脚本n使用am
uiautomator+脱离PC运行(apk启动uiautomator)的实现方案
终于搞出来了。美滋滋!附上代码:https://download.csdn.net/download/u013247461/10801027nn效果:nn打开MyUIautomatorTest.apk,点击run uiautomator 按钮,就能直接运行你的脚本。n方案概述:nnn新建一个Android app工程MyUIautomatorTest,在Activity中添加Button,用于启动...
直接通过adb shell cmd直接打开android apk
当我们加了我们自己的Launcher.apk后,android系统可能就找不到桌面了,此时当我们想打开某个apk时可能就不能操作了,有没有什么办法可以帮助我们打开apk呢?答案是肯定的,用adb shell即可:rn1. 打开camera 应用:rnadb shell am start -n com.android.camera2/com.android.camera.CameraActivity
python+uiautomator 自动化测试安卓手机中的问题
1.uiautomator环境的安装rn  在linux和ubuntu中我们可以执行pip install uiautomator去安装这个环境。rnrn  2.如果在执行脚本是遇到这个错误IOError: RPC server not started!:rn    首先我们应该先检查d = Device('值') 里面的值 有没有问题(adb devices 可以查看)rn    如果没有问题的
如何用adb命令启动安装的APK
本文不涉及adb的其他命令,仅说一下如何启动不知道启动类的apk。先提条件是我们知道apk的包名。 n第一步:找出包含此包名的apk的所有信息 n adb shell dumpsys package com.examle.xx n第二步:从中找出需要的信息(也就是找到android.intent.action.MAIN,因为他只最先被启动的)。 n第三步:利用找到的信息中启动apk。
uiautomator如何实现脱机/脱离USB数据线运行脚本
怎么实现脱机/脱离数据线运行脚本呢?其实,很简单,在运行脚本中在-C前加上一句“--nohup”:
Android使用UiAutomator进行测试
UiAutomatorView的位置:n D:\Program Files\adt-bundle-windows-x86_64-20140702\sdk\tools\uiautomatorviewer.batn测试代码编写过程:n 1.建立一个java项目,新建lib文件夹。 n 2.拷贝android.jar和uiautomator.jar到lib文件夹(jar文件的地址:D:\Progra
使用uiautomator2自动化测试app(一)------安装篇
uiautomator2是可以使用python对Android设备做UI自动化的库,由于该项目也是正在火热进行当中所以网上对于它的资料很少.nn具体的介绍可以查看https://github.com/openatx/uiautomator2nnn一. 安装adbnnnadb,即Android Debug Bridge,它是Android开发/测试人员不可替代的强大工具,具体内容自行百度.nn1.下...
安卓自动化之uiautomator(python篇)一 环境搭建
参考文档:https://github.com/xiaocong/uiautomatorn1.所需的环境 :nJDK   配置环境变量nSDK   设置adb的环境变量npython  设置环境变量n2.uiautomator的安装n利用pip安装,如果未将pip目录添加到path中,切换到python/scripts目录下,使用命令:pip install uiautomator
uiautomator一个简单脚本运行
运行步骤:rnrn1、在D:\software\adt-bundle-win64-20151231\adt-bundle-win64-20151231\sdk\tools目录下,输入android create uitest-project -n -t -p rn比如:D:\software\adt-bundle-win64-20151231\adt-bundle-win64-20151231
adb shell命令查看Andriod手机上应用的包名及报错解决方案(win10)
一、打开CMD,输入adb shell回车,输入cd  data/data   再输入ls ,就可以查看到包名,rn这样使用时报错了:rnrnrn原因是没有root权限,解决方法:手机上安装360超级root,手机root成功后,rncmd上输入su后,再输入ls就可以获取包名了rnrnrn二、第二种方式是:rn直接连接好手机,输入adb shell pm list packages就可以查看包名
android 给app授权 执行shell命令
一个简单的应用 给app授予root权限并执行shell命令 急需又没资源的可以直接联系我 我会尽快回复你 或者qq邮箱
Android 通过ADB Shell 强行关闭和启动应用
1.在PC上通过adb 关闭/启动应用nn1)通过adb连接设备 adb connect 192.168.1.XX , 当然也可以通过USB 直接连接;nn2) 执行adb shell ps 查看当前正在运行的进程列表,可以获取进程的名字;nn3)执行adb shell am force-stop 包名 即可强行关闭进程,eg: adb shell am force-s...
在UiAutomator里启动和关闭应用
1、am法rnUiDevice里有一个方法是executeShellCommand,我们可以用命令行的am start -n 包名/Activity名来启动应用。rngetUiDevice().executeShellCommand("am start -n 包名/Activity名");rnrnrn同理,可以用 am force-stop 包名来关闭应用。 rnrngetUiDevice().e
android中通过adb shell关闭和启动应用
1.终端上: n a.首先我们需要来到sdk/adb目录下; n b.执行“adb connect 192.168.1.xx”连接到你的设备,‘xx’表示你设备的ip; n c.执行“adb shell ps ”查看进程目录; n d.找到你要关闭或者打开的应用包名,然后执行“adb shell am force-stop 包名”强制关闭或者“adb sh
通过包名启动apk
笔记
uiautomator打包jar后如何给测试员提供可视化界面自行选择执行用例
我们uiautomator写完所有用例,打包好jar包,要提供给测试员或者客户使用,至少要做个简便操作界面框,不可能让测试人员重新敲代码,这里我采用.bat的方法,双击就可以运行,测试员就可以根据提示选择要执行的测试用例,这就需要到shell语言了。n效果大概如下(因为公司网络做了限制,不能截图上传,就是cmd类):nnn欢迎使用自动化压力测试用例,脚本由宽带终端测试科自动化团队制作nnD
Android 使用adb向虚拟机里安装APK
n n n Android Studio自带的android虚拟机不像Genymotion模拟器那样,把下载好的APK拖进虚拟机里就可以安装了,今天使用adb成功安装APK,留此记录方便以后查询,增加记忆。首先,将下载好的APK文件拷贝到开发环境中的SDK->platform-tools目录下,最好把APK文件名字改成一个方便输入的,因为后面要用到命令输入行操作...
odex修改,解决 android 5.0 以下 uiautomator 遇到特殊字符和emoji表情失败崩溃的错误
因项目需要 需要用到 android 自带的命令 uiautomator dumprn使用过程中发现 在android 5.0 以下版本中 uiautomator 遇到特殊字符,主要是emoji 表情,会出现错误,类似如下:rnrnrnuiautomator dump /sdcard/a.xmlnjava.lang.IllegalArgumentException: Illegal charact
java中调用adb shell 命令启动android应用程序
实现方法:n一、把下面的adb shell命令做成bat文件,然后在java程序中调用即可,  例子中为启动美团appnnadb shell am start -n com.sankuai.meituan/com.sankuai.meituan.activity.Welcomenexitnnnn二、代码示例(下面代码在手机上测试通过)nnn/*n*   启动应用程序n*/
UiAutomator2.0的四种脱机方式
Uiautomator2.0拥有多用例需要集成测试的情况下,我们往往需要考虑如何脱机运行多用例nn1、手机root,并开发对应app,由app执行调起U2的多命令来实现nn2、取得手机rom的系统签名,并给调起命令的app进行签名后,由app执行调起U2的多命令来实现nn如果以上两种方式不可行的情况下,请博友们往下看:nn3、一个测试class集成多class中的测试方法,调起命令为一个命令,但执...
Android自动化之uiautomator(一)
一、uiautomator简介nnAndroid SDK提供下述工具来支持自动化的功能界面测试:nn1、uiautomatorviewer:扫描、分析待测应用的UI组件的图像工具。nn2、uiautomator:包含创建定制功能界面测试API和自动化运行测试用例的引擎的JAVA类库。nn优点:可以对所有操作进行自动化,操作简单;nn缺点:Android版本需要高于4.0。
Uiautomator界面中存在的控件,但是无法被点击的问题解决
在Android P出来后,开展自动化测试的路上一些地方有些磕磕绊绊。先说说之前发现的一种必现的无法点击到桌面控件的问题,明明界面中存在,但是无法被点击,Uiautomator运行时并没有抛出这一步的异常,但是下一步就抛异常了。nn详细的实例如下:case删除全部联系人的操作步骤(点击删除--选择确定--验证是否正确删除)nnnn而因为无法点击到删除这个控件,导致没有弹出确认窗口,导致下一步的点击...
android执行adb shell命令源码
android执行adb shell命令源码,亲测可用!
利用UIAutomator发微信消息
最近在研究发自动给微信发消息,有研究过WebApi的方案实现出来了,但这种方式容易被封号,在想其他方案时想到用外挂这种偏门的方法看下行不行,于是就想到了android的UIAutomator测试框架,这个框架总体上来说是使用AccessibilityService来实现发送模似点击等消息,比如很多抢红包的方案就是用这个来做的.UIAutomator测试框架使用起来其实很简单,首先新建一个andro...
android UiAutomator利用am命令启动和结束进程
最近在学习UiAutomator的时候看到UiAutomator可以利用am命令启动和结束进程,自己练习了一下,感觉效果挺不错的。分享一下经验。rn//启动QQrnRuntime.getRuntime().exec("am start -n com.tencent.mobileqq/.activity.SplashActivity");rnrn//关闭QQ,如果运行中想结束得加上waitfor()
ADB命令安装APK常见错误总结
通过adb命令安装应用过程:                        常见问题以及原因:Failure [INSTALL_FAILED_ALREADY_EXISTS]:应用已经存在,需要卸载设备中现有的。:没有找到设备,查看是否开启调试,或者数据线有问题Failure [INSTALL_FAILED_UPDATE_INCOMPATIBLE]:版本不能共存,可能使用了相同版本的SDKFailu...
用adb 命令打开和关闭 apk包安装apk包
首先电脑要装有安卓开发环境n1 查看包名 命令如下nadb shell npm list packagenn2 退出apk 包nadb shell nadb shell am force-stop +包名 nn3 安装apk 包nadb install -r +手动拖入包 +回车nnn...
Python之使用adb shell命令启动应用
Python学习之adb shell启动应用
如何在手机安装UIautomator apk
执行python -m uiautomator2 init 报错(原文地址):https://blog.csdn.net/qq_35661796/article/details/84194252nn1.先执行python -m uiautomator2 init -e https://pypi.doubanio.com/simple (此条初始化命令必须到UIautomator2目录下执行,目录为...
uiautomator快速获取android画面UI元素
想要获取android手机屏幕上某个地方的文字内容,起初还想着获取手机屏蔽画面,然后用图像文字数字识别的方法来获取图中文字的内容。 n后来知道 用uiautomator 可快速分析到android手机应用的UI元素,这样就没此前想的用图像识别那么复杂了。还有一个ui工具可分析UI元素,uiautomatorviewer n从哪找,怎么打开,怎么用?起初进行了一翻摸索,去除弯路,最后总结一下。 n从官
adb 启动某个apk
有时候需要用apk来启动某个apknnadb shell am start -n com.android.launcher3/com.android.launcher3.Launchernn nn具体查看~nn/rk3399_7in1/packages/apps/Launcher3/AndroidManifest.xmlnnnn
Android UiAutomator: 从apk中启动实现方法
UiAutomator 脚本启动通常是通过PC执行一条adb命令来实现的,实现简单,官方的指导文档也是这么写的;然而缺点启动要依赖PC,同时又占用手机的USB端口。 这里讲的是通过Android app中启动UiAutomator 脚本。
Android 通过命令行启动Activity
通过命令行可以启动任何一个activity,如果启动Main Activity就等于是启动了相应的apkn命令: adb shell am start -n 包名 / 包含包名的ActivitynnCamera(照相机)的启动:nadb shell am start -n com.android.camera/com.android.camera.CameranMusic(音乐播放器)的
【附理解】批处理文件:实现将写好的Android Uiautomator工程打包成jar包放到手机中执行
问题:UIAutomator有一个麻烦:无法通过Eclipse直接编译。rn解决:UIAutomator需要经历一系列的命令进行编译。rn参:《深入理解Android自动化测试(移动开发)》和http://developer.android.com/tools/testing/testing_ui.htmlrn具体步骤如下:rn1) 通过如下命令创建编译文件built.xmlrn/tools/an
通过adb命令启动Android程序
第一步nn在电脑与Android设备在同一网关的基础上,使用adb命令:adb connect Android设备ip:端口 n连上Android设备。nn第二步nn使用adb命令: nadb shell am start -n 应用包名/应用入口 n就可以打开Android程序了。nn不知道入口怎么办nn如果不是自己的App,可以使用用反编译读取Android清单文件,这里推荐AndroidKi...
uiautomator解决设置中文问题
我们知道通过uiautomator中UiObject.setText(),可以用来设置文本,可是不知什么缘故Google设计的这个方法只能接收ASCII码,因此直接调用这个方法设置中文当然会错,为此有人专门写了输入法utf7ime专门用来解决这个问题,它是开源的,我们可以在github下载到它的源码https://github.com/sumio/uiautomator-unicode-input
python+uiautomator+adb dump(Android手机自动化) 根据文本寻找所在坐标并点击
#! -*- coding:utf-8 -*-n#! /usr/bin/pythonnnimport tempfilenimport osnimport renimport xml.etree.cElementTree as etnimport timenimport randomnndef tap_coord_by_name_id(deviceid, attrib_name, text_name
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 java代码学习apk java学习.apk