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

哈哈,我住的採摘尼特 –