在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问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
命令行运行uiautomator
sdk/docs/reference/android/support/test/runner/AndroidJUnitRunner.html Typical Usage Write JUnit3 style TestCases and/or JUnit4 style Tests that perform tests against the classes in your pac
Uiautomator2.0 启动测试命令时传参和取参
在使用Uiautomator2.0过程中,有时候因业务需求,从启动命令中获取即时参数更便于跑测试。 本文提供Uiautomator2.0(以下简称U2)一个如何从启动命令中传递参数,以及在脚本中如何获取参数。   1、首先看下U2启动命令中的帮助文档提示 (-e 传递的是一个类似键值对的<NAME>和<VALUE>) 2、所以,我们的启动命令应该是这样: a...
Uiautomator使用(app自动化)
简介 Android 4.3发布的时候包含了一种新的测试工具–uiautomator,uiautomator是用来做UI测试的。也就是普通的手工测试,点击每个控件元素 看看输出的结果是否符合预期。比如 登陆界面 分别输入正确和错误的用户名密码然后点击登陆按钮看看是否能否登陆以及是否有错误提示等。 官方介绍如下: UI Automator is a UI testing framework s...
如何使用adb shell命令启动一个安装好的apk
今天在刷一个平板触屏固件的时候遇到一个问题,就是如何使用adb shell命令启动一个安装好的apk,下面就是步骤了,大家可以参考一下:       1、首先确定你的apk已经安装好了,至于怎么确定呢,我这给你推荐一个很笨
uiautomator+脱离PC运行(apk启动uiautomator)的实现方案
终于搞出来了。美滋滋!附上代码:https://download.csdn.net/download/u013247461/10801027 效果: 打开MyUIautomatorTest.apk,点击run uiautomator 按钮,就能直接运行你的脚本。 方案概述: 新建一个Android app工程MyUIautomatorTest,在Activity中添加Button,用于启动...
uiautomator2.0+脱离PC运行(apk启动uiautomator2.0+)的实现方案
uiautomator2.0+脱离PC运行(apk启动uiautomator2.0+)效果:打开MyTest.apk,点击run uiautomator,就能直接运行你的脚本。方案概述: 新建一个Android app工程MyTest,在Activity中添加Button,用于启动脚本 给这个app添加系统签名 在MyTest中新建一个module,命名为MyTestCase,用于编写脚本 使用am
直接通过adb shell cmd直接打开android apk
当我们加了我们自己的Launcher.apk后,android系统可能就找不到桌面了,此时当我们想打开某个apk时可能就不能操作了,有没有什么办法可以帮助我们打开apk呢?答案是肯定的,用adb shell即可: 1. 打开camera 应用: adb shell am start -n com.android.camera2/com.android.camera.CameraActivity
python+uiautomator 自动化测试安卓手机中的问题
1.uiautomator环境的安装   在linux和ubuntu中我们可以执行pip install uiautomator去安装这个环境。   2.如果在执行脚本是遇到这个错误IOError: RPC server not started!:     首先我们应该先检查d = Device('值') 里面的值 有没有问题(adb devices 可以查看)     如果没有问题的
Android使用UiAutomator进行测试
UiAutomatorView的位置: D:\Program Files\adt-bundle-windows-x86_64-20140702\sdk\tools\uiautomatorviewer.bat 测试代码编写过程: 1.建立一个java项目,新建lib文件夹。 2.拷贝android.jar和uiautomator.jar到lib文件夹(jar文件的地址:D:\Progra
安卓自动化之uiautomator(python篇)一 环境搭建
参考文档:https://github.com/xiaocong/uiautomator 1.所需的环境 : JDK   配置环境变量 SDK   设置adb的环境变量 python  设置环境变量 2.uiautomator的安装 利用pip安装,如果未将pip目录添加到path中,切换到python/scripts目录下,使用命令:pip install uiautomator
Android程序中(APK程序)执行Adb shell 命令
APK程序执行Adb shell 命令 shell与高级语言间的调用
十五、Android UiAutomator 辅助APK的使用
一、在测试中弹出提示框 UiAutomator无法直接实现,,但是可以通过让辅助APK接受UiAutomator发送的指令信息来实现,使用am命令 实例: 1.新建辅助apk,用来接收Uiautomator用例中的广播信息(新建android appliction project,然后next直到finish为止,注意创建过程中选对API) 2.建好工程后将一些不用的代码删除,需要删除
android UiAutomator利用am命令启动和结束进程
最近在学习UiAutomator的时候看到UiAutomator可以利用am命令启动和结束进程,自己练习了一下,感觉效果挺不错的。分享一下经验。 //启动QQ Runtime.getRuntime().exec("am start -n com.tencent.mobileqq/.activity.SplashActivity"); //关闭QQ,如果运行中想结束得加上waitfor()
使用uiautomator2自动化测试app(一)------安装篇
uiautomator2是可以使用python对Android设备做UI自动化的库,由于该项目也是正在火热进行当中所以网上对于它的资料很少. 具体的介绍可以查看https://github.com/openatx/uiautomator2 一. 安装adb adb,即Android Debug Bridge,它是Android开发/测试人员不可替代的强大工具,具体内容自行百度. 1.下...
基于 uiautomator 与 shell 的自动化测试工具
转载地址:https://testerhome.com/topics/3461 今年年初的时候,公司让写个做自动化测试的工具,真头疼!我都没做过这,心里怕怕的,但交待我来做,我又不能不接,罢了,做!   因为没做过,我只学过些java,都毕业三四年了,哪记得那多,想着用python做,听说python容易上手,找了本python做GUI的书,全英文的,看了一遍,云里雾里的,没概
传值到UiAutomator中
adb shell uiautomator runtest UiAutomatorjar.jar -c cn.nubia.something.ConfiguratorTest
android 给app授权 执行shell命令
一个简单的应用 给app授予root权限并执行shell命令 急需又没资源的可以直接联系我 我会尽快回复你 或者qq邮箱
uiautomator如何实现脱机/脱离USB数据线运行脚本
怎么实现脱机/脱离数据线运行脚本呢?其实,很简单,在运行脚本中在-C前加上一句“--nohup”:
uiautomator一个简单脚本运行
运行步骤: 1、在D:\software\adt-bundle-win64-20151231\adt-bundle-win64-20151231\sdk\tools目录下,输入android create uitest-project -n -t -p 比如:D:\software\adt-bundle-win64-20151231\adt-bundle-win64-20151231
Python之使用adb shell命令启动应用
Python学习之adb shell启动应用
adb shell命令查看Andriod手机上应用的包名及报错解决方案(win10)
一、打开CMD,输入adb shell回车,输入cd  data/data   再输入ls ,就可以查看到包名, 这样使用时报错了: 原因是没有root权限,解决方法:手机上安装360超级root,手机root成功后, cmd上输入su后,再输入ls就可以获取包名了 二、第二种方式是: 直接连接好手机,输入adb shell pm list packages就可以查看包名
在UiAutomator里启动和关闭应用
1、am法 UiDevice里有一个方法是executeShellCommand,我们可以用命令行的am start -n 包名/Activity名来启动应用。 getUiDevice().executeShellCommand("am start -n 包名/Activity名"); 同理,可以用 am force-stop 包名来关闭应用。 getUiDevice().e
Android 通过命令行启动Activity
通过命令行可以启动任何一个activity,如果启动Main Activity就等于是启动了相应的apk 命令: adb shell am start -n 包名 / 包含包名的Activity Camera(照相机)的启动: adb shell am start -n com.android.camera/com.android.camera.Camera Music(音乐播放器)的
C#通过ADB和UiAutomator实现对安卓手机的控制(一)
从事安卓开发的朋友应该都知道adb和UiAutomator是什么了,前者是安卓调试桥(Android Debug Bridge),通过它我们可以调试安卓设备中的程序;后者是一款安卓ui的自动化测试工具,它可以对安卓设备实现自动化的点击、滑动、输入等操作。通过这两个工具我们可以控制安卓设备 安装/卸载/打开/关闭 某个应用,也可以让手机自动执行浏览、点击、输入文字等操作。但是这两款工具是通过命令行操作……
uiautomator打包jar后如何给测试员提供可视化界面自行选择执行用例
我们uiautomator写完所有用例,打包好jar包,要提供给测试员或者客户使用,至少要做个简便操作界面框,不可能让测试人员重新敲代码,这里我采用.bat的方法,双击就可以运行,测试员就可以根据提示选择要执行的测试用例,这就需要到shell语言了。 效果大概如下(因为公司网络做了限制,不能截图上传,就是cmd类): 欢迎使用自动化压力测试用例,脚本由宽带终端测试科自动化团队制作 D
使用 uiautomator dump 获取app上的页面元素
1.输入:adb shell /system/bin/uiautomator dump --compressed /data/local/tmp/uidump.xml 2.查看页面是否存到了/data/local/tmp目录下 3.把/data/local/tmp目录下的uidump.xml文件pull到电脑桌面 adb pull /data/local/tmp/uidump.xml...
在android程序中执行adb shell命令
在android程序中执行adb shell命令行的函数:     public static void doCmds(List cmds) throws Exception { Process process = Runtime.getRuntime().exec("su"); DataOutputStream os = new DataOutputStream(proces
在命令行通过adb shell am broadcast发送广播
adb shell am broadcast 后面的参数有: [-a ] [-d ] [-t ]  [-c [-c ] ...]  [-e|--es ...]  [--ez ...]  [-e|--ei ...]  [-n ] [-f ] [] 例如: adb shell am broadcast -a com.Android.t
odex修改,解决 android 5.0 以下 uiautomator 遇到特殊字符和emoji表情失败崩溃的错误
因项目需要 需要用到 android 自带的命令 uiautomator dump 使用过程中发现 在android 5.0 以下版本中 uiautomator 遇到特殊字符,主要是emoji 表情,会出现错误,类似如下: uiautomator dump /sdcard/a.xml java.lang.IllegalArgumentException: Illegal charact
如何用adb命令启动安装的APK
本文不涉及adb的其他命令,仅说一下如何启动不知道启动类的apk。先提条件是我们知道apk的包名。 第一步:找出包含此包名的apk的所有信息 adb shell dumpsys package com.examle.xx 第二步:从中找出需要的信息(也就是找到android.intent.action.MAIN,因为他只最先被启动的)。 第三步:利用找到的信息中启动apk。
adb命令启动和关闭apk
2014-05-10 10:32 在终端直接输入如下内容即可: #adb shell am start -n 包名/.类名 不如要打开camera,就输入adb shell am start -n com.android.camera/.Camera即可
利用UIAutomator发微信消息
最近在研究发自动给微信发消息,有研究过WebApi的方案实现出来了,但这种方式容易被封号,在想其他方案时想到用外挂这种偏门的方法看下行不行,于是就想到了android的UIAutomator测试框架,这个框架总体上来说是使用AccessibilityService来实现发送模似点击等消息,比如很多抢红包的方案就是用这个来做的.UIAutomator测试框架使用起来其实很简单,首先新建一个andro...
java中调用adb shell 命令启动android应用程序
先把adb shell命令做成bat文件,然后再程序中调用即可, 下面代码在手机上测试通过 /* * 启动应用程序 */ public void startActivity(String pakageName,String activityName){ try{ // Process p = Runtime.getRuntime().exec("cmd.exe
UiAutomator2.0的四种脱机方式
Uiautomator2.0拥有多用例需要集成测试的情况下,我们往往需要考虑如何脱机运行多用例 1、手机root,并开发对应app,由app执行调起U2的多命令来实现 2、取得手机rom的系统签名,并给调起命令的app进行签名后,由app执行调起U2的多命令来实现 如果以上两种方式不可行的情况下,请博友们往下看: 3、一个测试class集成多class中的测试方法,调起命令为一个命令,但执...
UiAutomator系列——Appium Android Bootstrap源码分析之启动运行(009)
通过前面的两篇文章《Appium Android Bootstrap源码分析之控件AndroidElement》和《Appium Android Bootstrap源码分析之命令解析执行》我们了解到了Appium从pc端发送过来的命令是如何定位到命令相关的控件以及如何解析执行该命令。那么我们剩下的问题就是bootstrap是怎么启动运行的,我们会通过本篇文章的分析来阐述这个问题,以及把之前学习
apk中启动一个shell脚本
JAVA中,可以调用execCommand方法运行shell脚本,以下是一个例子: 1. #! /system/bin/sh 2. #最简单的一个shell,没什么功能 3. #需要注意的是必须是 #! /system/bin/sh开头(有空格) 4. #和一般linux不同,如果用#!/bin/sh就会找不到(因为没有) 5. ls 复制代码 在cmd中用adb push d:\\
Android 通过ADB Shell 强行关闭和启动应用
1.在PC上通过adb 关闭/启动应用 1)通过adb连接设备     adb connect 192.168.1.XX    , 当然也可以通过USB 直接连接;  2)   执行adb shell ps  查看当前正在运行的进程列表,可以获取进程的名字; 3)执行adb shell am force-stop 包名  即可强行关闭进程,eg:   adb shell am force-s...
android中通过adb shell关闭和启动应用
1.终端上: a.首先我们需要来到sdk/adb目录下; b.执行“adb connect 192.168.1.xx”连接到你的设备,‘xx’表示你设备的ip; c.执行“adb shell ps ”查看进程目录; d.找到你要关闭或者打开的应用包名,然后执行“adb shell am force-stop 包名”强制关闭或者“adb sh
adb命令查看包名和adb启动你的apk
1.如何用adb获得手机里面某个apk的应用信息、版本信息 adb shell dumpsys package com.examle.xx adb shell dumpsys 列出所有 2 如何用adb启动apk adb shell am start -n breakan.test/breakan.test.TestActivity adb shell am start -n...
Android 使用 adb命令 远程安装apk
Android 使用 adb命令 远程安装apk ./adb devices 列出所有设备 ./adb connect 192.168.1.89 连接到该设备 ./adb logcat 启动logcat ./adb install -r /Users/streetpoet/Desktop/MytvPauselive.apk 将本地apk安装到远程
文章热词 设计制作学习 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 java学习.apk java代码学习apk