android - 使用 Android Studio 3.1 开发 AOSP 无法为插桩测试构建测试 apk

标签 android intellij-idea android-source android-studio-3.0

我正在尝试使用 Android Studio 构建自定义 AOSP(在 Android M 上,api 23),因为我想对硬件上运行的自定义应用程序运行仪器测试。这是在 ubuntu 64 上。这让我很沮丧,因为没有明确的路径。

我的目标:我想关注 steps in this AS user guide用于仪器化测试。


我运行了脚本

~/myAOSP/development/tools/idegen/intellij-gen.sh myApp company/apps/MY_APP

并在 Android Studio 中打开 MY_APP.iml。

现在我正在尝试使用 gradle 为我的项目构建 apk,以及测试 apk。

主要的 myAOSP 使用 makefile。

我按照此处的说明进行操作,还使用了 build.gradle 作为模板 https://developer.android.com/studio/intro/migrate#migrate-intellij

// This buildscript{} block configures the code driving the build
buildscript {
   /**
    * The nested repositories{} block declares that this build uses the
    * jcenter repository.
    */
    repositories {
        jcenter()
        google()
    }

   /**
    * This block declares a dependency on the 3.1.0 version
    * of the Gradle plugin for the buildscript.
    */
    dependencies {
        classpath 'com.android.tools.build:gradle:3.1.2'
    }
}

/**
 * This line applies the com.android.application plugin. Note that you should
 * only apply the com.android.application plugin. Applying the Java plugin as
 * well will result in a build error.
 */
apply plugin: 'com.android.application'

/**
 * This dependencies block includes any dependencies for the project itself. The
 * following line includes all the JAR files in the libs directory.
 */
dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    testImplementation 'junit:junit:4.12'
    // Add other library dependencies here (see the next step)
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
}

/**
 * The android{} block configures all of the parameters for the Android build.
 * You must provide a value for at least the compilation target.
 */
android {
    compileSdkVersion 23
    buildToolsVersion '27.0.3'
    defaultConfig {
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    /**
    * This nested sourceSets block points the source code directories to the
    * existing folders in the project, instead of using the default new
    * organization.
    */
    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            aidl.srcDirs = ['src']
            renderscript.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']
        }

        // Move the tests to tests/java, tests/res, etc...
        androidTest.setRoot('tests')

       /**
        * Move the build types to build-types/<type>
        * For instance, build-types/debug/java, build-types/debug/AndroidManifest.xml, ...
        * This moves them out of them default location under src/<type>/... which would
        * conflict with src/ being used by the main source set.
        * Adding new build types or product flavors should be accompanied
        * by a similar customization.
        */
        debug.setRoot('build-types/debug')
        release.setRoot('build-types/release')
     }
}

repositories {
    jcenter()
    google()
}

还有一个 gradle 错误:由于 Android M 是用 JDK 1.7 构建的,而 Android Studio gradle 使用的是 1.8,我按照这些步骤操作但出现了 gradle 错误,Could not set unknown property 'sourceCompatibility' for root project 'MY_PROJECT' of `类型 org.gradle.api.Project。 docs.gradle.org/current/userguide/building_java_projects.html # 在 $HOME/.gradle/gradle.properties javaHome=/Library/Java/JavaVirtualMachines/1.7.0.jdk/Contents/Home

targetJavaVersion=1.7 build.gradle sourceCompatibility = targetJavaVersion –`

我看到类似 Developing AOSP with Android Studio 的帖子但它们已过时或不相关。 还有 http://ronubo.blogspot.com/2016/01/debugging-aosp-platform-code-with.html?view=magazineError:(23, 17) Failed to resolve: junit:junit:4.12

我正在寻找一个可行的解决方案,以解决在自定义 AOSP 中为应用构建插桩测试 apk 并在 Android Studio 3.1(或更高版本)中运行插桩测试的问题。

a) 如果可以在 gradle AS 3.1(或更高版本)中构建检测测试 apk,请建议修复显示的 gradle 错误。

b) 如果无法在上面的 a) 中进行 gradle 构建,那么我是否需要使用自定义 AOSP 中的当前 makefile 来构建检测测试 apk?

c) 如果我使用 makefile 构建插桩测试 apk,那么我仍然可以使用 AS 中的插桩 UI 在硬件上运行测试吗?

最佳答案

是的,可以在 AOSP 中使用 Gradle 构建应用 APK 和测试应用 APK,但难度取决于它们的依赖关系,即 Makefile 可能引用预构建二进制文件或 AOSP 中的另一个模块,可能不是公共(public) Maven 存储库中的等效依赖项,因此您需要通过其他方式引入这些依赖项。如果您的应用是系统应用,则需要为签名步骤提供平台签名。

a) 您遇到的 Gradle 错误是什么?哪个 Gradle 任务给了你这个错误?

b) 您可以设置一个 Makefile 来构建经过检测的 APK,例如查看它是如何完成的 here .您还可以使用 Trade Federation framework处理执行和报告生成 - 但您不会在 AS 中进行集成。

c) 仪表 UI 是指使用“播放按钮”开始测试,还是在测试运行时实时显示测试结果?如果你的意思是显示实时结果,那么我认为这是不可能的——据我所知,这取决于 connectedAndroidTest 任务。如果您只想执行测试,您可以创建一个自定义 Gradle 任务,它只运行“adb shell am instrument ...”命令。

关于android - 使用 Android Studio 3.1 开发 AOSP 无法为插桩测试构建测试 apk,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50415724/

相关文章:

android - 使用适用于 Android 的 Intellij IDEA 新 libgdx 项目运行时出现 NullPointerException

android - 如果有人知道你的 SHA-1 证书指纹 :, "dangerous"是怎么回事?

Android ADT更新错误

java - 程序应在 Textfield 更改其文本后等待

intellij-idea - java.lang.NoClassDefFoundError:kotlin/jvm/internal/Intrinsics

安卓源。 TextView 。 Eclipse 找不到一些包

android - 如何使用属性对自定义 View 进行单元测试

intellij-idea - intellij 插件开发显示带有多个文本框的输入对话框

Android源码框架修改重建但在模拟器中生效

android - 从android源代码构建