Android Studio导入CTS测试用例并测试

为了方便的进行CTS测试和验证,将CTS测试用例导入Android studio能够提高效率。

备注:此文章也适合将安卓原生应用导入Android Studio步骤

系统环境及软件

  1. 电脑操作系统:Windows 10专业版
  2. Android Studio 3.2.1
  3. JDK 1.8.0_191
  4. 安卓源码版本:Android 9.0
  5. NDK版本18.1.5xxx

CTS测试用例导入Android Studio步骤

在开始之前先安装JDK和ndk,并配置好jdk和ndk环境变量。

CTS测试用例所在目录:安卓源码根目录\cts\tests和\cts\tests\tests,此处以camera测试用例为例子。

  • 新建工程,并复制cts测试用例。为了减少自己创建工程的一些必备文件,直接在Android Studio(以下简称AS)新建一个工程,工程名称为CTSCamera,为了使用安卓源码的工程目录,把工程中的src目录删除,将安卓源码根目录\cts\tests\camera目录下的所有文件复制到CTSCamera/app目录下。
  • 配置工程gradle。打开app/build.gradle,将defaultConfig标签下的applicationId改成camera的包名,即android.camera.cts,并在android标签下新增sourceSets标签,如下:
sourceSets {
    main {
        manifest.srcFile 'AndroidManifest.xml'

              // 其中src,utils为默认camera源码,多个时以逗号隔开;后面几个为依赖的源码,从安卓源码中复制到工程中
        java.srcDirs = ['src', 'utils', 'test-annotations', 'test-runner-src', 'test-mock-src']
        res.srcDirs = ['res']
        aidl.srcDirs = ['src']
        assets.srcDirs = ['assets']

              //若有jni源码,但是又不想使用,仅用于修改并生成so,可以如下设置
        jni.srcDirs = []
        jniLibs.srcDirs = ['libs']

              //.rs文件目录
        renderscript.srcDirs = ['src']
    }
}

 

  • 配置工程依赖jar包和so。打开Android.mk,其中会列出工程依赖的jar、so等。

首先看依赖的静态java库,找到LOCAL_STATIC_JAVA_LIBRARIES关键字,这是工程依赖的jar包。工程的依赖包在源码全编译后的out\target\common\obj\JAVA_LIBRARIES或者out\target\product\xxx(产品型号)\obj\JAVA_LIBRARIES中可以找到,比如此例子中的依赖有compatibility-device-util,mockito-target-minus-junit4,android-ex-camera2等,在common\obj\JAVA_LIBRARIES\目录中找到compatibility-device-util_intermediates\classes.jar,将此jar包改名成compatibility-device-util.jar后复制到CTSCamera\app\libs目录下,其他jar包也类似方式添加到libs目录下。若xxx_imtermediates目录下没有classes.jar,或者jar包中没有java文件编译后的.class文件,则只能找到相关的源码,以源码方式引入工程,作为主工程的依赖库导入。有些jar没有在mk中列出来,那么可在JAVA_LIBRARIES目录下搜索找不到的类,从而定位jar包。

其次看依赖的动态库,在app/Android.mk中有LOCAL_JNI_SHARED_LIBRARIES关键字,表明应用还需要调用so库,在工程中的jni目录(app\jni,且包含Android.mk),则需要通过ndk-build命令将cpp代码编译成so。方法是打开命令行窗口,进入到工程jni目录,执行ndk-build命令,成功后在app\libs目录下生成arm64-v8a,armeabi-v7a等so库。或者更简单的方法是直接把cts测试后生成的testcase/CtsCameraTestCases.apk解压,把libs中的so库复制到工程目录,省去自己编译。

  • 编译错误解决。
    • Error: Program type already present: (xxx xxx),原因是因为jar包中的类重复。

解决方法:将包含重复类的jar解压,删除重复类(包)之后,打开命令行窗口,进入到解压后文件夹根目录,执行:jar -cvf android.jar . 命令,其中android.jar为重新打包后的jar包名称,“.”表示将当前目录所有文件打包,如图1所示,最后将重新打包的jar覆盖libs中原来的jar。

                                                                                         图1 重新打包jar

  • 应用可以打包出apk,也没有编译错误,但是R文件飘红,import处也是提示找不到R文件。

解决方法:打开AS安装目录的bin目录,打开idea.properties,将idea.max.intellisense.filesize=2500中的2500改成5000

参考:https://jingyan.baidu.com/article/870c6fc3655fd1b03fe4bed5.html

 

  • 在framework.jar中有相关的方法,但是工程中无法引用到,默认引用SDK的api,或者其他jar中的方法无法优先于SDK api调用。

解决方法:假设framework.jar放在app/libs目录下,在工程的build.gradle中加入如下语句:

allprojects {

    repositories {

        google()

        jcenter()

    }

    gradle.projectsEvaluated {

        tasks.withType(JavaCompile) {

            options.compilerArgs.add('-Xbootclasspath/p:app/libs/framework.jar')
// 多个时用分号隔开,形如
// options.compilerArgs.add('-Xbootclasspath/p:app/libs/framework.jar;app/libs/telephony-common.jar')

        }

    }

}

在模块的build.gradle的最外层(不包含于任何标签内)加上如下语句:

// make SDK directory's android.jar set in libs behind

preBuild {

    doLast {

        def imlFile = file(project.name + ".iml")

        println 'Change ' + project.name + '.iml order'

        try {

            def parseXml = new XmlParser().parse(imlFile)

            def jdkNode = parseXml.component[1].orderEntry.find { it.'@type' == 'jdk' }

            parseXml.component[1].remove(jdkNode)

            def sdkString = "Android API " + android.compileSdkVersion.substring("android-".length()) + " Platform"

            new Node(parseXml.component[1], 'orderEntry', ['type': 'jdk', 'jdkName': sdkString, 'jdkType': 'Android SDK'])

            groovy.xml.XmlUtil.serialize(parseXml, new FileOutputStream(imlFile))

        } catch (FileNotFoundException e) {

            //nop, iml not found.

        }

    }

}

运行测试用例

在能够正常打包apk后,配置Run参数。菜单Run--Edit Configrations中进行如图2配置。

                                                                                      图2配置测试类

最后,点击Run图标即可测试图2所配置的测试类,首次测试会提示权限拒绝错误,先在手机设置--应用中将android.camera.cts应用的所有权限打开,然后在点击Run图标即可正常测试,用例测试成功如图3,用例测试失败如图4。

                                                                                     图3测试用例成功 

                                                                                   图4 测试用例失败

若要更换测试类,在Edit Configrations选择其他测试类,再次运行即可。

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值