10

Dans mon androïde de gradle.properties je les suivantes:Configurer gradle.properties android.enableAapt = false sur travis fichier YML

android.enableAapt2=false 

Mon gradle.properties se trouve dans mon ~/.gradle/gradle.properties dans ma machine locale.

Je me demande comment je peux ajouter android.enableAapt=false à mon fichier yml.

J'ai essayé de l'ajouter sous global mais cela n'a pas fonctionné il n'y avait pas d'erreurs 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 se trouve 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 en cours de 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(); 
    } 
} 

L'erreur travis-ci log:

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ù le dossier res est que la mise en page/recipe_item ne peuvent pas être trouvés:

android.content.res.Resources$NotFoundException: me.androidbox.busbybaking:layout/recipe_item 
+1

Etes-vous sûr de ne pas mélanger 'android.enableAapt' avec' android.enableAapt2'? Vous ne pouvez pas désactiver AAPT, vous pouvez désactiver AAPT2. – azizbekian

+1

Aussi vous avez écrit 'android.enableApat = false' dans votre fichier' yml', il devrait être 'Aapt' au lieu de' Apat'. – azizbekian

+0

C'était mon erreur dans le travis-ci. C'était une faute de frappe. J'ai mis à jour ma question en conséquence. – ant2009

Répondre

6

Je pense que le problème est que vous désactivez AAPT2 dans les propriétés globales fichier ~/.gradle/gradle.properties au lieu du fichier de propriétés du projet /yourproject/gradle.properties.

+0

Cela a fonctionné pour travis-ci, merci. Cependant, juste une question rapide. Dans mon projet local, le studio android utilisera le global ~/.gradle/grade.properties ou le ~/myProject/gradle.properties local? – ant2009

+1

Les propriétés globales ont priorité sur les propriétés locales, c'est-à-dire si vous définissez une variable avec le même nom dans le fichier global et le projet 'gradle.properties', alors que celui de global aura une priorité plus élevée. – azizbekian

0

Il pourrait être que vous avez copié le nom du fichier gradle.properties de cette officielle tweet:

https://twitter.com/androidstudio/status/875311569219006464

Unfortunettely le texte gradle.propertіes a été écrit avec cyrilliques « 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 BIÉLORUSSIE-UKRAINIEN I'.

Dans ce cas, le fichier ne sera pas reconnu et utilisé.