gradle.properties
dans mon Android, j'ai les éléments suivants:
Android.enableAapt2=false
Mon gradle.properties
se trouve dans mon ~/.gradle/gradle.properties
sur mon ordinateur local.
Je me demande comment je peux ajouter Android.enableAapt=false
à mon fichier yml.
J'ai essayé de l'ajouter sous global mais cela ne fonctionnait pas, il n'y avait pas d'erreur, mais dans robolectric
, il doit être défini si vous utilisez 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)
Ci-dessous le fichier de configuration qui est sur 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"
}
Classe sous test:
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();
}
}
Le journal des erreurs 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)
Je pense que le travis-ci ne peut pas trouver où se trouve le dossier res car le layout/recipe_item est introuvable:
Android.content.res.Resources$NotFoundException: me.androidbox.busbybaking:layout/recipe_item
Je pense que le problème est que vous désactivez AAPT2 dans le fichier de propriétés globales ~/.gradle/gradle.properties
au lieu du fichier de propriétés du projet /yourproject/gradle.properties
.
Il se peut que vous ayez copié le nom du fichier gradle.properties à partir de ce officiel Tweet:
https://Twitter.com/androidstudio/status/875311569219006464
Malheureusement, le texte gradle.propertіes a été écrit avec cyrilic 'i':
echo 'gradle.propertіes' | hexdump -C
00000000 67 72 61 64 6c 65 2e 70 72 6f 70 65 72 74 d1 96 | gradle.propert .. | 00000010 65 73 0a | es. |
0xd196
est en UTF8 'LETTRE MINUSCULE CYRILLIQUE BYELORUSSIAN-UKRAINIAN I'.
Dans ce cas, le fichier ne sera ni reconnu ni utilisé.