0

我在同一代码库中有两个应用程序。他们使用相同的java文件并保存res文件,除了值和可绘制文件夹,它们具有相同的文件但文件名不同但内容不同。Android Flavors - 无法解析符号R

我遇到的问题是,当我的摇篮建立,我有一个问题,因为到处都是,我使用RI有错误

Cannot resolve symbol R

我的build.gradle文件看起来像这样(与简洁留下了几个设置):

android { 
    signingConfigs { 
     // left out 
    } 
    compileSdkVersion 23 
    buildToolsVersion "23.0.1" 
    useLibrary 'org.apache.http.legacy' 
    lintOptions { 
     disable "ResourceType" 
    } 
    defaultConfig { 
     applicationId = "com.au.testapp" 
     minSdkVersion 16 
     targetSdkVersion 23 
     versionCode = 1 
     buildConfigField 'String', 'app_ver_numb', '"1.00"' 
     multiDexEnabled = true 
    } 
    sourceSets { 
     main { 
      java.srcDirs = ['src'] 
      resources.srcDirs = ['src'] 
      aidl.srcDirs = ['src'] 
      renderscript.srcDirs = ['src'] 
      assets.srcDirs = ['assets'] 
      res.srcDirs = ['res/main'] 
      manifest.srcFile 'AndroidManifest.xml' 
     } 

     flavorone{ 
      res.srcDirs = ['res/flavorone'] 
     } 

     flavortwo{ 
      res.srcDirs = ['res/flavortwo'] 
     } 

     instrumentTest.setRoot('tests') 
    } 

    productFlavors { 
     flavorone { 
      applicationId "com.au.testapp.flavorone" 
      versionName = "''" 
      buildConfigField 'String', 'app_id', '"79"' 
     } 
     flavortwo { 
      applicationId "com.au.testapp.flavortwo" 
      versionName = "''" 
      buildConfigField 'String', 'app_id', '"79"' 
     } 
    } 

    buildTypes { 
     debug { 
      productFlavors.flavorone.signingConfig signingConfigs.flavorone 
      productFlavors.flavortwosigningConfig signingConfigs.flavortwo 
     } 
     release { 
      productFlavors.flavorone.signingConfig signingConfigs.flavorone 
      productFlavors.flavortwo.signingConfig signingConfigs.flavortwo 

      minifyEnabled true 
      shrinkResources true 
      proguardFile getDefaultProguardFile('proguard-android.txt') 
     } 
    } 
} 

我的文件夹结构如下所示:

src 
    com 
     au 
      testapp 
       adapter 
       utils 
       db 
       common 
       ... 
res 
    main 
     anim 
     animator 
     ... 
     drawable 
     layout 
     values 
     ... 
    flavorone 
     drawable 
     values 
    flavortwo 
     drawable 
     values 

当我在Gradle中构建它时,我没有收到任何错误,但是当我构建项目时,我的java文件通过它们都有错误,因为它们找不到R ..我猜这是与由于我的构建风格设置,包名称不正确。

任何想法?

回答

1

好吧,现在我的挑剔完成,这里是我的回答实际尝试:

我认为这个问题就在于,你有你的资源目录中的RE /内部各的味道。如果你看at this post你会发现特定于风味的资源应该放在src/flavorName/res目录下,而不是像res/flavorname那样。

当你在它的时候,继续并从你的源集关闭删除风味关闭。只要目录名称与风味名称相匹配,并且您遵循规范的文件夹组织,则不需要为风味定义源集合。

+0

我会给你一个去,并尽快回复您nitpicker!感谢您的帮助至今:) – Nickmccomb

+1

没问题。我更多关注了你的问题,我认为在移动flavor资源之后,你还必须将r​​es/main中的内容放到res中。 (之后不要忘记更新build.gradle)。此外,你将不得不将你的基本应用程序的Java文件(你在src中的文件)移动到src/main/java中。这个SO贴子比我解释如何构建您的文件的风味更好的工作:http://stackoverflow.com/a/20345749/6526330 –

+0

啊现在它是有道理的!这是我第一天的口味,所以我仍然习惯于应该如何设置。我现在走在正确的轨道上,感谢您的帮助! – Nickmccomb

1

大部分时间都是由于坏的XML文件造成的。 XML文件可以是布局文件,值文件或Manifest文件。

1)检查你的xml文件。

2)这样import android.R.*;或类似这样的import com.au.testapp.R;

3进口R)清洁工程和重建

+0

XML文件没有改变,因为我建立之前添加口味,我会尝试你的R导入和清理和重建,看看是否可行。 – Nickmccomb

+0

尝试以这种方式导入'import com.au.testapp.R;' –

+0

那没用。仍然有R的问题。没有flavorone或flavortwo在我的构建 - >生成 - >源代码 - > r – Nickmccomb

0

我没有足够的信誉发表评论,所以我必须回答的问题。

在res中你的目录实际上叫做“flavor1”,而你在build.gradle中使用的目录名叫做“flavorone”?我注意到在你的文章中,但林不知道这是否是你的项目中的情况。如果是这样,它可能会导致问题。

+0

啊,你忍住了我 –

+0

我希望在别人评论之前,我会编辑它!大声笑 – Nickmccomb

+1

哈哈,我住的采摘尼特 –