web-dev-qa-db-fra.com

Configurer gradle.properties Android.enableAapt = false sur le fichier travis yml

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
9
ant2009

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.

6
azizbekian

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é.

0
radzimir