Разработка AOSP с Android Studio 3.1 не может построить тестовый apk для инструментальных тестов


Я пытаюсь построить настраиваемый AOSP (на Android M, api 23) С помощью Android Studio, потому что я хочу запустить инструментальные тесты для пользовательских приложений, работающих на оборудовании. Это на ubuntu 64. Это очень расстраивает меня, так как нет четкого пути.

Моя цель: я хочу следовать шагам в этом руководстве пользователя для инструментальных тестов.


Я запустил сценарий

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

И открыл MY_APP.iml в Android Studio.

Теперь я пытаюсь построить apk, используя gradle только для моего проекта, а также тестовый apk.

Основной myAOSP использует файлы Makefile.

Я следовал инструкциям здесь, а также использовал сборку.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, не мог установить неизвестное свойство "sourceCompatibility" для корневого проекта "MY_PROJECT" типа " org.градля.прикладной программный интерфейс.Проект. docs.gradle.org/current/userguide/building_java_projects.html # в $HOME/.среда Gradle/Gradle в.свойства javaHome= / Library / Java / JavaVirtualMachines / 1.7.0.jdk / Contents / Home

TargetJavaVersion=1.7 build.gradle sourceCompatibility = targetJavaVersion - '

Я видел сообщения, подобные разработка AOSP с Android Studio но они устарели или не актуальны. Также http://ronubo.blogspot.com/2016/01/debugging-aosp-platform-code-with.html?view=magazine и ошибка: (23, 17) не удалось разрешить: junit: junit:4.12

Я ищу рабочее решение проблемы создания инструментального теста apk для приложения в настраиваемом AOSP и запуска инструментальных тестов на нем в Android Studio 3.1 (или более поздней версии).

A) если возможно построить инструментальный тест apk в gradle как 3.1 (или более поздней версии), то, пожалуйста, предложите исправление ошибки gradle показано.

B) если сборка gradle в a) выше невозможна, то нужно ли мне создавать инструментальный тестовый apk, используя текущие файлы Makefile в настроенном AOSP?

C) если я создаю инструментальный тестовый apk с использованием makefiles, то могу ли я по-прежнему использовать интерфейс инструментария в AS для запуска тестов на оборудовании?

1 9

1 ответ:

Да, можно построить приложение APK и тестовое приложение APK с Gradle в AOSP, но сложность зависит от их зависимостей, т. е. там, где файл Makefile может ссылаться на предварительно построенный двоичный файл или другой модуль в AOSP, может не быть эквивалентной зависимости в общедоступных репозиториях Maven, поэтому вам нужно будет использовать эти зависимости другими способами. И если ваше приложение является системным приложением, вам нужно будет предоставить подпись платформы для шага подписания.

A) какова ошибка Gradle, которую вы получается? И какая задача Gradle дает вам эту ошибку?

B) Вы можете настроить Makefile, чтобы просто построить инструментальный APK, например, смотрите, как это делается здесь. Вы также можете использовать trade Federation framework для обработки выполнения и генерации отчетов - но вы не получите интеграцию в AS.

C) под инструментарием UI вы подразумеваете запуск тестов с помощью кнопки "play" или отображение результатов тестирования в реальном времени во время выполнения тестов? Если вы имеете в виду показ живые результаты, то я не верю, что это возможно - насколько я знаю, это зависит от задачи connectedAndroidTest. Если вы просто хотите выполнить тесты, вы можете создать пользовательскую задачу Gradle, которая просто запускает инструмент "adb shell am"..." команда.