Android Espresso apk 文件及其 sdk 版本

Posted

技术标签:

【中文标题】Android Espresso apk 文件及其 sdk 版本【英文标题】:Android Espresso apk file and its sdk version 【发布时间】:2018-07-12 05:05:43 【问题描述】:

目前我需要两个 apk 文件,以便我可以在 AWS 设备场上运行测试:

    app.apk app-androidTest.apk

app.apk 按我的预期生成

$ ./aapt list -a .../apk/app-debug.apk | grep SdkVersion

A: android:minSdkVersion(0x0101020c)=(type 0x10)0x10 A: android:targetSdkVersion(0x01010270)=(type 0x10)0x19 A: android:maxSdkVersion(0x01010271)=(type 0x10)0x19

但是无论我做什么,app-androidTest.apk 的 sdk 版本都固定为 0x19(25)

$ ./aapt list -a .../apk/app-debug-androidTest.apk | grep SdkVersion

A: android:minSdkVersion(0x0101020c)=(type 0x10)0x19 A: android:targetSdkVersion(0x01010270)=(type 0x10)0x19

我的 gradle 设置如下:

compileSdkVersion 25
buildToolsVersion '25.0.2'
lintOptions 
    checkReleaseBuilds false
    // Or, if you prefer, you can continue to check for errors in release builds,
    // but continue the build even when errors are found:
    abortOnError false

defaultConfig 
    applicationId "com.thisclicks.appdataroom"
    minSdkVersion 16
    targetSdkVersion 25
    versionCode versCode as Integer
    versionName versName
    multiDexEnabled true
    testInstrumentationRunner

我需要一个 minSdk 0x10、targetSdk 0x19 的测试 apk。但它不遵循我的 gradle 设置并被其他东西覆盖。但是没有 gradle 或 androidManifest 干扰。我的猜测是,当我生成测试 apk 时,我是通过在具有 API 25 的模拟器上手动运行来完成的。它会自动生成 apk。这是我的测试 apk 与 25 的 sdk 版本(最小和目标)绑定的可能原因吗?如果那你知道如何解决这个问题吗?

【问题讨论】:

【参考方案1】:

我找到的唯一解决方案。是使用 API 级别低于目标 SDK 的模拟器运行测试。

如果我使用我的 android 8.0.1 设备运行测试,它会将 testcase.apk minsdk 设置为与目标 sdk 相同,即 26。但如果我在 android studio 中使用 api level 21 模拟器运行测试,它将构建测试用例apk 与 minsdk 18

希望对你有所帮助。

【讨论】:

【参考方案2】:

assembleAndroidTest 命令也会在未连接设备时正确构建 APK。

【讨论】:

以上是关于Android Espresso apk 文件及其 sdk 版本的主要内容,如果未能解决你的问题,请参考以下文章

Apk文件及其编译过程

Espresso:单击 ListView 页脚中按钮的操作

使用 Espresso for APK 编写 UI 测试,无需源代码

Android基础——物理按键,长按,触摸事件及其监听器

如何从 Android 中的 apk 文件中获取源代码? [复制]

如何防止对 Android APK 文件进行逆向工程以保护代码?