Android 从命令行生成UiAutomator 2.0

Android 从命令行生成UiAutomator 2.0,android,shell,testing,android-uiautomator,Android,Shell,Testing,Android Uiautomator,我想通过命令行构建、安装和运行UiAutomator项目的测试 在以前的版本中,我正在做: android create uitest-project -n <project_name> -p <project_path> -t <target_id> ant build android创建uitest项目-n-p-t 蚁群 建造 然后 adb推送/数据/本地/tmp 安装并最终 adb shell uiautomator runtest <jar

我想通过命令行构建、安装和运行UiAutomator项目的测试

在以前的版本中,我正在做:

android create uitest-project -n <project_name> -p <project_path> -t <target_id>
ant build
android创建uitest项目-n-p-t
蚁群
建造 然后

adb推送/数据/本地/tmp
安装并最终

adb shell uiautomator runtest <jar_name> -c <main_class>
adb外壳uiautomator运行测试-c
然而,现在我被困在建筑部分

结果是

-check-env:
  [checkenv] Android SDK Tools Revision 24.1.2                                    
  [checkenv] Installed at C:\Android                                                                                                                             
-build-setup:                                                                   
[getbuildtools] Using latest Build Tools: 22.0.0                                     
    [echo] Resolving Build Target for AndroidExplorerTester...                 
[getuitarget] Project Target:   Android 5.0.1                                   
[getuitarget] API level:        21                                                   
    [echo] ----------                                                               
    [echo] Creating output directories if needed...                                                                                                            
-pre-compile:                                                                                                                                                   
compile:                                                                                                                                                        
-post-compile:                                                                                                                                                  
-dex:                                                                                 
    [dex] input: <test_path>\bin\classes                                                                          
    [dex] Converting compiled files and external libraries into <test_path>\bin\classes.dex...
     [dx] no classfiles specified                                                                                                                             
BUILD FAILED                                                                    
C:\Android\tools\ant\uibuild.xml:198: null returned: 1                                                                                                          
Total time: 1 second             
-检查环境:
[checkenv]Android SDK工具修订版24.1.2
[checkenv]安装在C:\Android
-生成设置:
[getbuildtools]使用最新的构建工具:22.0.0
[echo]正在解析AndroidExplorerTester的生成目标。。。
[getuitarget]项目目标:Android 5.0.1
[getuitarget]API级别:21
[回声]------------
[echo]如果需要,正在创建输出目录。。。
-预编译:
汇编:
-编译后:
-指数:
[dex]输入:\bin\classes
[dex]正在将编译文件和外部库转换为\bin\classes.dex。。。
[dx]未指定类文件
构建失败
C:\Android\tools\ant\uibuild.xml:198:null返回:1
总时间:1秒
自从UiAutomator的新版本发布以来,我不知道现在是否有更好的方法


注意:我不知道这是否重要,但我以前使用过Eclipse,现在使用的是IntelliJ(Android Studio,如果你更喜欢lol)

我终于找到了答案

从命令行中,在项目的主文件夹(您可以在其中找到gradlew.bat文件)中运行以下命令

构建

.\gradlew.bat assembleDebug
.\gradlew.bat connectedCheck
在设备上安装

.\gradlew.bat installDebug
(如果您想要发布版本,只需替换Debug for Release,我没有尝试,但选项存在,因此我认为它们可以工作)

跑步

.\gradlew.bat assembleDebug
.\gradlew.bat connectedCheck
如果您想知道其他选项,您可能已经运行了

.\gradlew.bat tasks
额外信息

要以编程方式(Java)执行,请使用Runtime.getRuntime().exec(String命令,String[]envp,File dir)。比如说,

Runtime.getRuntime().exec(shell_command + " <path_to_test_folder>\gradlew.bat assembleDebug", null, new File(<path_to_test_project>));

对于那些不想搬到gradle并希望和ant住在一起的人来说,这里还有一个方法。顺便说一句,旧方法不起作用的主要原因是uiautomator从2.0版本开始从JAR的独立测试运行程序迁移到应用程序的标准android“am instrument”测试运行程序。这个动作只有一个“对立面”。现在,测试项目应该绑定到一个明确的目标应用程序(请参阅第一步中的解决方法)。所以这里有一个计划

首先,您应该有一个目标项目,您的测试就是为这个项目设计的。事实上,它可以是一个空的应用程序,无论是在应用程序菜单中,还是在测试期间,它都不会显示。我已经在Eclipse中创建了一个,而没有在向导中创建任何活动。要使ant的build.xml运行:

android update project --target 0 --path %path_to_empty_app%
有关android工具的更多信息,请参见http://developer。安卓com/tools/projects/projects cmdline.html

注意:您可能希望为目标应用程序授予必要的权限,该权限将传播到测试应用程序。现在,测试未使用shell用户权限运行

第二步是创建一个测试项目。正如我提到的,uiautomator现在集成在标准的android测试方案中。因此,它使用标准命令创建测试应用程序:

android create test-project -m %path_to_target_app% -n %test_app_name% -p %path_to_test_app%
通常的应用程序结构将在%path_to_test_app%中创建,包括ant的build.xml 有关更多信息,请参阅

第三:复制uiautomator类jar以测试应用程序库。jar可以从SDK中的*.aar归档文件中提取,该文件位于\extras\android\m2repository\com\android\support\test\uiautomator\uiautomator-v18\2.1.0或类似文件中

第四:将您的测试类*.java放入testappsrc文件夹。请注意uiautomator中的以下更改:

  • 包从com.android.uiautomator重命名为 android.support.test.uiautomator
  • UiAutomatorTestCase类是 为兼容而保留,但已弃用;扩展您的测试类 从InstrumentationTestCase中,要获取UiDevice实例,请使用 UiDevice.getInstance(getInstrumentation())
  • 第五:安装并运行测试。简单方法如下:

    cd %path_to_test_app%
    :: Here 'ant instrument install' builds and installs both target and test apps.
    ant instrument install
    ant test
    
    或者最后一行可以修改为

    adb shell am instrument -w %target_app_full_name%.tests/android.test.InstrumentationTestRunner
    

    有关更多信息,请参见

    注意,
    connectedCheck
    无论如何都会生成和安装,因此手动运行命令会浪费一些时间。