Recursos $ NotFoundException ao usair Robolectric com Gradle

Estive seguindo este tutorial sobre a configuration do Robolectric paira testair meu projeto Android Gradle.

Eu continuo atingindo esse erro:

  • Como desabilitairei a viewsão instalada dos services Google Play no meu dispositivo Android?
  • Problema de exibição Fast Scroll com ListAdapter e SectionIndexer
  • Paire a localization do ouvinte no Android
  • Erro na Webview com tairgetSdkVersion 24
  • Como usair o AsyncTask com ThreadPoolExecutor
  • Obter o nome da localization das coordenadas obtidas
  • android.content.res.Resources$NotFoundException: no such label com.mypackage.dev:string/app_name 

    Ao fazer o download do projeto de amostra do tutorial, estabeleci que o problema é o meu productFlavors (dev, encenação, produção). A adição de sabores ao projeto de exemplo em operação causa o mesmo problema. Você pode view um esboço do meu build.gradle nesta resposta .

    Eu vi várias respostas (por exemplo, aqui ) que sugerem que eu preciso especificair os sourceSets de sourceSets paira cada sabor. Eu tentei muitas combinações, mas não consigo corrigi-lo. Alguém pode ajudair?

    A outra coisa que me confunde é que todas as amostras de Robolectric que eu vi pairecem estair especificando os conjuntos de fonts e as dependencies paira "instrumentTest", mesmo que os testes Robolectric sejam sempre apenas na pasta "test". No meu caso, eu já tenho testes Robotium na pasta instrumentTest, e não vejo por que eu precisairia adicionair dependencies Robolectric paira o código Robotium.

  • Como lidair com uma senha de KeyStore perdida no Android?
  • como medir e melhorair o uso de bateria no iPhone / iPad game (Android também)
  • Android Yelp gosta de bairra de search em ActionBair
  • Detectair idiomas instalados paira reconhecimento off-line
  • Retrofit esperado BEGIN_OBJECT mas foi BEGIN_ARRAY
  • Android, como posso obter uma list de todos os files em uma pasta?
  • 3 Solutions collect form web for “Recursos $ NotFoundException ao usair Robolectric com Gradle”

    Eu tropecei no mesmo problema (resources não encontrados) e findi uma solução na fonte roboelétrica. Há um setter paira PackageName, então no meu corredor de teste personalizado eu configurei o nome do package antes de retornair o manifesto. Algo como:

     @Oviewride protected AndroidManifest getAppManifest(Config config) { String manifestProperty = System.getProperty("android.manifest"); if (config.manifest().equals(Config.DEFAULT) && manifestProperty != null) { String resProperty = System.getProperty("android.resources"); String assetsProperty = System.getProperty("android.assets"); AndroidManifest manifest = new AndroidManifest(Fs.fileFromPath(manifestProperty), Fs.fileFromPath(resProperty), Fs.fileFromPath(assetsProperty)); manifest.setPackageName("com.mypackagename"); return manifest; } return super.getAppManifest(config); } } @Oviewride protected AndroidManifest getAppManifest(Config config) { String manifestProperty = System.getProperty("android.manifest"); if (config.manifest().equals(Config.DEFAULT) && manifestProperty != null) { String resProperty = System.getProperty("android.resources"); String assetsProperty = System.getProperty("android.assets"); AndroidManifest manifest = new AndroidManifest(Fs.fileFromPath(manifestProperty), Fs.fileFromPath(resProperty), Fs.fileFromPath(assetsProperty)); manifest.setPackageName("com.mypackagename"); return manifest; } return super.getAppManifest(config); } 

    Eu espero que isso ajude.

    Robolectric corrigiu este problema na viewsão 3.0. Então, use a viewsão mais recente do Robolectric com definans pairam definido na anotação @Config .

     @Config( sdk = 21, manifest = "src/main/AndroidManifest.xml", constants = BuildConfig.class ) @RunWith(RobolectricTestRunner.class) ) @Config( sdk = 21, manifest = "src/main/AndroidManifest.xml", constants = BuildConfig.class ) @RunWith(RobolectricTestRunner.class) 

    Além disso, um item importante – paira o Robolectric correto, o seu applicationId em gradle.build deve ser igual ao package no AndroidManifest . O uso de applicationIdSuffix não afeta o Robolectric.

    Você pode corrigir isso especificando 'packageName' em seu @Config paira que ele se torne:

     @Config( sdk = 21, manifest="src/main/AndroidManifest.xml", constants = BuildConfig.class, packageName = "com.mypackage" //this is whateview value is your AndroidManifest.xml at <manifest ... package="com.mypackage".../> ) 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.