Разработка AOSP с Android Studio 3.1 Невозможно собрать тестовый APK для инструментальных тестов - PullRequest
0 голосов
/ 18 мая 2018

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

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


Я запустил скрипт

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

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

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

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

Я следовал приведенным здесь инструкциям и также использовал 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. Не удалось установить неизвестное свойство 'sourceCompatibility' для корневого проекта 'MY_PROJECT' типа org.gradle.api.Project.docs.gradle.org/current/userguide/building_java_projects.html # в $ HOME / .gradle / gradle.properties javaHome = / Библиотека / 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), если возможно построить инструментированный апк тестирования в Gradle AS 3.1 (или более поздней версии)), затем, пожалуйста, предложите исправить показанную ошибку gradle.

b) если сборка Gradle в a) выше НЕ возможна, то нужно ли создавать инструментированный тестовый apk с использованием текущих make-файлов в настроенном AOSP?

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

1 Ответ

0 голосов
/ 21 июня 2018

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

a) Какую ошибку Gradle вы получаете?И какое задание Gradle дает вам эту ошибку?

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

c) Под пользовательским интерфейсом инструментов вы подразумеваете запусктесты с «кнопкой воспроизведения» или показ результатов теста в реальном времени во время выполнения тестов?Если вы хотите показать результаты в реальном времени, то я не верю, что это возможно - насколько я знаю, это зависит от задачи подключенного AndroidTest.Если вы просто хотите выполнить тесты, вы можете создать пользовательскую задачу Gradle, которая просто запускает команду «adb shell am instrument ...».

...