В моем андроиде gradle.properties
у меня есть следующее:
android.enableAapt2=false
Мой gradle.properties
находится в моем ~/.gradle/gradle.properties
на моей локальной машине.
Мне интересно, как я могу добавить android.enableAapt=false
в свой yml файл.
Я попытался добавить его под глобальный, но это не сработало, ошибок не было, но в robolectric
он должен быть установлен, если вы используете gradle:3.0.0-beta3
.
language: android
jdk: oraclejdk8
env:
global:
- ANDROID_TARGET=android-25
- ANDROID_ABI=armeabi-v7a
- android.enableAapt2=false
android:
components:
- tools
- platform-tools
- build-tools-25.0.3
- android-25
- extra-android-m2repository
- sys-img-${ANDROID_ABI}-${ANDROID_TARGET}
licenses:
- android-sdk-license-.+
- '.+'
script:
- ./gradlew --daemon build jacocoTestReport --info
after_success:
- bash <(curl -s https://codecov.io/bash)
Ниже приведен файл конфигурации, который находится на travis-ci
{
"language": "android",
"jdk": "oraclejdk8",
"android": {
"components": [
"tools",
"platform-tools",
"build-tools-25.0.3",
"android-25",
"extra-android-m2repository",
"sys-img-${ANDROID_ABI}-${ANDROID_TARGET}"
]
},
"licenses": [
"android-sdk-license-.+",
".+"
],
"script": [
"./gradlew --daemon build jacocoTestReport --info"
],
"after_success": [
"bash <(curl -s https://codecov.io/bash)"
],
"global_env": "ANDROID_TARGET=android-25 ANDROID_ABI=armeabi-v7a android.enableAapt2=false",
"group": "stable",
"dist": "precise",
"os": "linux"
}
Испытуемый класс:
public class RecipeListViewHolderTest extends BaseRobolectricTestRunner {
@Inject Map<Integer, RecipeListViewHolderFactory> viewHolderFactories;
@Inject @LayoutRes int recipeItem; /* This is injected return R.layout.recipe_item; */
private RecipeListViewHolder recipeListViewHolder;
@Before
public void setup() {
getTestComponent().inject(RecipeListViewHolderTest.this);
final Context context = ShadowApplication.getInstance().getApplicationContext();
final View view = View.inflate(
context,
recipeItem,
new LinearLayout(context));
recipeListViewHolder = viewHolderFactories.get(Constants.RECIPE_LIST).create(view);
assertThat(recipeListViewHolder, is(notNullValue()));
}
private Recipe createRecipeData() {
Recipe recipe = new Recipe();
recipe.setName("Test Brownies");
recipe.setServings(10);
return recipe;
}
@Test
public void testRecipeDataIsPopulated() {
recipeListViewHolder.populateDate(createRecipeData());
assertThat(recipeListViewHolder.tvQuantity.getText().toString(), is("Quantity: 10"));
assertThat(recipeListViewHolder.tvRecipeName.getText().toString(), is("Test Brownies"));
}
}
Robolectric:
@Config(constants = BuildConfig.class,
sdk = Build.VERSION_CODES.LOLLIPOP,
packageName = "me.androidbox.busbybaking",
application = BusbyBakingApplication.class)
@RunWith(RobolectricTestRunner.class)
public abstract class BaseRobolectricTestRunner {
protected TestBusbyComponent getTestComponent() {
return DaggerTestBusbyComponent.builder()
.mockRecipeListModule(new MockRecipeListModule())
.mockRecipeSchedulersModule(new MockRecipeSchedulersModule())
.build();
}
}
Журнал ошибок travis-ci:
me.androidbox.busbybaking.recipieslist.RecipeListViewHolderTest > testRecipeDataIsPopulated FAILED
android.content.res.Resources$NotFoundException: me.androidbox.busbybaking:layout/recipe_item
at org.robolectric.shadows.ShadowAssetManager.loadXmlResourceParser(ShadowAssetManager.java:391)
at org.robolectric.shadows.ShadowResources.loadXmlResourceParser(ShadowResources.java:211)
at android.content.res.Resources.loadXmlResourceParser(Resources.java)
at android.content.res.Resources.getLayout(Resources.java:1049)
at android.view.LayoutInflater.inflate(LayoutInflater.java:412)
at android.view.LayoutInflater.inflate(LayoutInflater.java:365)
at android.view.View.inflate(View.java:18415)
at me.androidbox.busbybaking.recipieslist.RecipeListViewHolderTest.setup(RecipeListViewHolderTest.java:41)
Я думаю, что travis-ci не может найти, где папка res, поскольку layout/recipe_item не может быть найден:
android.content.res.Resources$NotFoundException: me.androidbox.busbybaking:layout/recipe_item