android-gradle – 在Android Studio和AppCompat中使用Robolectric时找不到StyleData的父级

前端之家收集整理的这篇文章主要介绍了android-gradle – 在Android Studio和AppCompat中使用Robolectric时找不到StyleData的父级前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个 Android项目,它使用:

> Android Studio Gradle结构
> Android AppCompat库
> Robolectric进行测试

不涉及任何活动的测试(例如,断言1 == 1),工作正常.但是,当我使用activity时会产生以下错误

java.lang.RuntimeException: huh? can't find parent for StyleData{name='Theme_Sanactbar',parent='@style/Theme_AppCompat_Light_DarkActionBar'}
    at org.robolectric.shadows.ShadowAssetManager$StyleResolver.getParent(ShadowAssetManager.java:365)
    at org.robolectric.shadows.ShadowAssetManager$StyleResolver.getAttrValue(ShadowAssetManager.java:350)

我尝试了https://github.com/robolectric/robolectric/issues/979,但它创造了相同的结果.

供参考:

这是我的PROJECT / build.gradle

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    repositories {
        mavenCentral()
        // For Robolectric
        maven { url 'https://oss.sonatype.org/content/repositories/snapshots' }
        maven { url 'https://github.com/rockerhieu/mvn-repo/raw/master/' }
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.11.+'
        classpath 'com.neenbedankt.gradle.plugins:android-apt:1.2+'
        classpath 'org.robolectric.gradle:gradle-android-test-plugin:0.10.1-SNAPSHOT'
    }
}

allprojects {
    repositories {
        mavenCentral()
        // For Robolectric
        maven { url 'https://oss.sonatype.org/content/repositories/snapshots' }
    }
}

这是我的PROJECT / app / build.gradle

apply plugin: 'android'
apply plugin: 'android-apt'
apply plugin: 'android-test' // Robolectric

repositories {
    mavenLocal()
}

android {
    compileSdkVersion 19
    buildToolsVersion "19.1.0"

    defaultConfig {
        applicationId "id.web.michsan.helloworld"
        minSdkVersion 8
        targetSdkVersion 19
        versionCode 6
        versionName "1.1.1"
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_7
        targetCompatibility JavaVersion.VERSION_1_7
    }
    if (System.getenv("KEYSTORE") != null) {
        signingConfigs {
            release {
                storeFile file(System.getenv("KEYSTORE"))
                storePassword System.getenv("KEYSTORE_PASSWORD")
                keyAlias System.getenv("KEY_ALIAS")
                keyPassword System.getenv("KEY_PASSWORD")
            }
        }
    }
    buildTypes {
        release {
            runProguard false
            proguardFiles getDefaultProguardFile('proguard-android.txt'),'proguard-rules.txt'
            if (System.getenv("KEYSTORE") != null) {
                signingConfig signingConfigs.release
            }
        }
    }
    /* For the sake of butterknife */
    lintOptions {
        disable 'InvalidPackage'
    }

    sourceSets {
        androidTest.setRoot('src/test') // For Robolectric
    }
}

ext {
    androidApiVersion = '19.1.0'
    butterknifeVersion = '4.0.1'
    robotiumVersion = '5.0.1'
}
dependencies {
    compile 'com.android.support:appcompat-v7:' + androidApiVersion
    compile 'com.android.support:support-v4:' + androidApiVersion
    compile fileTree(dir: 'libs',include: ['*.jar'])
    compile(project(':core')) {
        exclude group: 'org.apache.httpcomponents'
        exclude group: 'org.json'
    }
    compile fileTree(dir: '../core/libs',include: ['*.jar'])
    apt 'com.jakewharton:butterknife:' + butterknifeVersion
    compile 'com.jakewharton:butterknife:' + butterknifeVersion
    androidTestCompile 'com.jayway.android.robotium:robotium-solo:' + robotiumVersion

    // For Robolectric
    androidTestCompile 'junit:junit:4.11'
    androidTestCompile 'org.robolectric:robolectric:2.3'

    compile 'com.mopub.mobileads:mopub-android:+@aar'
}


// Robolectric: Add this definition in order to only include files that are suffixed with Test.class and set the max heap size
androidTest {
    include '**/*Test.class'
    maxHeapSize = "2048m"
}

解决方法

在调试Robolectric源之后,我知道我需要创建project.properties文件.

假设您使用的是Android Studio项目结构,该文件的位置为PROJECT_X / app / src / main / project.properties

内容

android.library.reference.1=/../../../build/intermediates/exploded-aar/com.android.support/appcompat-v7/19.1.0

这是因为Robolectric的AndroidManifest.getBaseDir()为你提供了/ path / into / AndroidStudioProjects / PROJECT_X / app / src / main.

因此,此基本目录附加了引用位置.在这种情况下,我可以确保/ path / into / AndroidStudioProjects / PROJECT_X / app / src / main /../../../build/intermediates/exploded-aar/com.android.support/appcompat-v7/ 19.1.0给我一个包含appcompat库的AndroidManifest.xml的目录.

猜你在找的Android相关文章