使用Android Studio 3.1开发AOSP无法为仪表化测试构建测试apk

时间:2018-05-18 16:32:49

标签: 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错误,无法为根项目'MY_PROJECT'设置未知属性'sourceCompatibility' `type org.gradle.api.Project。 $ HOME / .gradle / gradle.properties中的docs.gradle.org/current/userguide/building_java_projects.html# 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

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

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

b)如果上面的a)中的gradle构建是不可能的,那么我是否需要使用自定义AOSP中的当前makefile构建检测测试apk?

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

1 个答案:

答案 0 :(得分:3)

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

a)您遇到的Gradle错误是什么?哪个Gradle任务会给您该错误?

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

c)通过工具界面,您是说要通过“播放按钮”启动测试,还是在测试运行时实时显示测试结果?如果您要显示实时结果,那么我认为这是不可能的-据我所知,这取决于connectedAndroidTest任务。如果您只想执行测试,则可以创建一个自定义的Gradle任务,该任务仅运行“ adb shell am instrument ...”命令。