Использование непродуктивной активности для тестирования с Android Studio

Перед Android Studio, тестирование и Android-приложение включали отдельный проект Android, который будет игнорироваться при создании для производства. В Android Studio производственный код и тестовый код существуют в рамках одного проекта, который сам по себе имеет только один набор всего остального (манифест, активы, ресурсы).

В этом случае, как я могу определить настраиваемое действие, которое будет использоваться только для тестирования? Чтобы Android мог активировать любую активность, она должна быть объявлена ​​в манифесте. Есть ли способ обойти это ограничение? Как Android может быть проинструктирован загружать тестовые действия без загрязнения производственных аспектов проекта?

Ответы

Ответ 1

Вот как это сделать.

1. Определите новый тип сборки в build.gradle:

buildTypes {
    extraActivity {
        signingConfig signingConfigs.debug
        debuggable true
    }
}

В моем я дал ему конфигурацию подписи отладки и установил ее для отладки; настройте по своему усмотрению.

2. Нажмите Проект синхронизации с помощью кнопки Gradle Файлы.

3. Выберите новый тип сборки из окна Build Variants.

4. Настройте исходные каталоги для нового типа сборки

В моем примере мои файлы находятся в пакете com.example.myapplication3.app Java.

src/extraActivity/java/com/example/myapplication3/app
src/extraActivity/res

5. Создайте новое действие в папках для вашего типа сборки

Имейте в виду, что если вы щелкните правой кнопкой мыши на пакете и выберите Новый > Активность, там будет ошибка, и он не поместит файлы для активности в ваш новый build type, но вместо этого они будут помещены в src/main. Если вы это сделаете, вам нужно будет перенести файлы в нужную папку вручную.

6. Создайте файл AndroidManifest.xml в src/extraActivity

Этот манифест получает merged с версией в src/main, поэтому добавьте только те биты, которые вам нужно наложить поверх оригинала:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myapplication3.app" >

    <application>
        <activity
            android:name=".ExtraActivity"
            android:label="Extra Activity" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

В моем примере я настроил свою новую деятельность как активность запуска, чтобы увидеть ее на экране "Приложения" и подтвердить ее работу; вам может не понадобиться это делать. Поскольку я передаю свое приложение двум значкам запуска, мне также нужно следовать советам двух действий по запуску и добавить это к моей основной активности intent-filter SRC/Основной/AndroidManifest.xml); вам может и не понадобиться:

<category android:name="android.intent.category.DEFAULT"/>

Вот скриншот моего макета проекта после всего этого:

Screen shot showing project structure

Это работает для меня. Я могу переключать типы сборки взад и вперед с помощью окна Build Variants (вы можете увидеть вкладку для него в левой части скриншота выше); построение варианта debug дает мне только одно действие, а построение варианта extraActivity дает мне два.