10

在我的Android的gradle.properties我有以下幾點:配置gradle.properties android.enableAapt =上特拉維斯陽明虛假文件

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) 

下面是配置文件是在特拉維斯-Cl

{ 
    "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(); 
    } 
} 

特拉維斯慈錯誤日誌:

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) 

我認爲特拉維斯-CI找不到在哪裏res文件夾是佈局/ recipe_item無法找到:

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

你確定你沒有將'android.enableAapt'與'android.enableAapt2'混合嗎?您不能禁用AAPT,您可以禁用AAPT2。 – azizbekian

+1

另外你在你的'yml'文件中寫了'android.enableApat = false',它應該是'Aapt'而不是'Apat'。 – azizbekian

+0

這是我在travis-ci中的錯誤。這是一個錯字。我相應地更新了我的問題。 – ant2009

回答

6

我認爲問題是,你是在全球性禁止AAPT2文件~/.gradle/gradle.properties而不是項目屬性文件/yourproject/gradle.properties

+0

這對於travis-ci非常有用,謝謝。然而,只是一個簡單的問題。在我的本地項目中,android studio會使用全局〜/ .gradle/grade.properties或本地〜/ myProject/gradle.properties? – ant2009

+1

全局屬性優先於本地屬性,即如果在全局和項目'gradle.properties'文件中定義了具有相同名稱的變量,那麼全局屬性將具有更高的優先級。 – azizbekian

0

這可能是,你從這個官方鳴叫複製的gradle.properties文件的名稱:

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

Unfortunettely文本gradle.propertіes與cyrilic寫「我':

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是UTF8'CYRILLIC小字母BYELORUSSIAN-UKRAINIAN我'。

在這種情況下,文件將不會被識別和使用。