gpt4 book ai didi

android-gradle-plugin - 在带有 AppCompat 的 Android Studio 中使用 Robolectric 时,找不到 StyleData 的父级

转载 作者:行者123 更新时间:2023-12-04 10:38:21 25 4
gpt4 key购买 nike

我有一个 Android 项目,它使用:

  • Android Studio Gradle 结构
  • Android AppCompat 库
  • 用于测试的 Robolectric

  • 在不涉及任何事件的情况下进行测试(例如,仅断言 1 == 1),效果很好。但是,当我使用事件时会产生以下错误:
    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但它产生了相同的结果。

    供引用:

    这是我的项目/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-gradle-plugin - 在带有 AppCompat 的 Android Studio 中使用 Robolectric 时,找不到 StyleData 的父级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24231913/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com