2015-04-12 56 views
2

我想爲我的android應用使用產品口味,因爲它似乎是一個很大的優勢。 然而有一件事我沒有得到解決:Gradle:如何讓產品口味從src/main繼承,除了一個

比方說,我有一個項目行星com.example.planets,我想建立一個應用程序的每顆行星:

productFlavors { 
    mercury { 
     applicationId "com.example.planets.mercury" 
    } 
    venus { 
     applicationId "com.example.planets.venus" 
    } 
    ... 
} 

大量的代碼是共享的,因此放在src/main文件夾中。

我也想在每個應用程序中使用相同MainActivity,除了地球應用程序,因爲它在此應用程序中有所不同。如何在不復制每個其他文件夾中的非地球版本的情況下實現該目標?

我試圖「覆蓋」MainActivity我上面提到的文件夾,但沒有奏效。

在此先感謝!

回答

0

我想你可以把src/main目錄下的非地球版本,並在earth的源目錄中添加地球相關的MainActivity。這樣,默認版本MainActivity將被earth以外的所有口味使用。

+0

這就是我想要的,但是當我嘗試這種方式時,它導致錯誤:(13,8)錯誤:當我運行地球應用程序時重複類:com.example.planets.MainActivity'。 –

2

我建議這樣的

. 
└── src 
    ├── earth 
    │ └── java 
    │  └── com 
    │   └── example 
    │    └── app 
    │     ├── MainActivity.java // extends Activity + your code 
    │     └── SomeClass.java 
    ├── main 
    │ └── java 
    │  └── com 
    │   └── example 
    │    └── app 
    │     ├── MainBaseActivity.java // extends Activity + your code 
    │     └── SomeClass.java 
    ├── mercury 
    │ └── java 
    │  └── com 
    │   └── example 
    │    └── app 
    │     ├── MainActivity.java // extends MainBaseActivity + empty body 
    │     └── SomeClass.java 
    └── venus 
     └── java 
      └── com 
       └── example 
        └── app 
    │     ├── MainActivity.java // extends MainBaseActivity + empty body 
    │     └── SomeClass.java 

文件結構,其中SomeClass.java代表所有普通類和代碼 水星和金星將使用「主」的MainActivity,而地球上有它自己的規定。

+0

感謝您使用詳細的文件夾樹,但是當我運行地球應用程序時,我總是會遇到'錯誤:(13,8)錯誤:重複的類:com.example.planets.MainActivity'。它對你有用嗎?你是如何解決「重複課堂」問題的? –

+0

我沒有遇到過這個問題。是的,我用這種結構製作了真正的應用程序。 仍然是一個解決辦法,我可以建議是,使主味MainBaseActivity,和擴展 即 'MainActivity擴展MainBaseActivity {/ *空體* /}' 在所有您想要不變的口味。 在地球上,只要去與 'MainActivity延伸活動{/ *您的代碼在這裏* /}' –

+0

我已經更新我的文件樹,以顯示我的意思 –