2014-03-24 34 views

回答

14

你是什麼意思?app name?清單中的應用程序包名稱或它在啓動器中顯示的應用程序名稱?

如果是前者,這樣做:

android { 
    productFlavors { 
    flavor1 { 
     packageName 'com.example.flavor1' 
    } 
    flavor2 { 
     packageName 'com.example.flavor2' 
    } 
    } 
} 

有可能覆蓋應用程序的名稱很好,但你必須提供一個香味覆蓋資源來代替。

因此,創建下列文件:

  • src/flavor1/res/values/strings.xml
  • src/flavor2/res/values/strings.xml

在他們身上只覆蓋包含您的應用程序名稱(在一個字符串資源,你的主清單使用活動標籤通過類似@string/app_name)。您也可以根據需要提供不同的翻譯。

+0

確切地說,我正在尋找一個解決方案來覆蓋應用程序名稱,我使用複製方法,因此我有一個新的文件夾包含一個新的string.xml修改,包含新的應用程序名稱!問題是我如何避免這個新文件的創建。我喜歡只是爲了取代它。 – wissem46

+0

這是做到這一點的最佳方式。黑客周圍編輯文件不是一個好主意,因爲它會破壞增量構建的檢測。 –

+0

find app/src/freefacebook/res/values/strings.xml -type f -exec perl -pi -w -e's/My_Application/free_facebook/g'{} \; – wissem46

8

您可以使用resValue,例如。

debug { 
    resValue 'string', 'app_name', '"MyApp (Debug)"'` 
} 
release { 
    resValue 'string', 'app_name', '"MyApp"' 
} 

確保您AndroidManifest使用android:label="@string/app_name"的應用,並從strings.xml中刪除APP_NAME,因爲它會產生衝突的gradle產出的產生strings.xml當它試圖將它們合併。

+1

這實際上是一個非常好的答案。我不知道人們爲什麼會根據手動創建'strings.xml'的內容來投票,但resValue應該是正確的方法,因爲您可以將實際值放入'gradle.properties'中。 –

0

這個答案是基於湯姆的,它的工作效果最好,你可以與gradle.properties一起工作,在構建過程中允許進一步的動畫。

build.gradle

debug { 
    resValue 'string', 'app_name', APP_NAME 
} 

gradle.properties

APP_NAME="Template 1" 
4

其實...爲了更明確的解釋;

的build.gradle:

ext { 
    APP_NAME = "My Fabulous App" 
    APP_NAME_DEBUG = "My Fabulous App debug" 
} 

應用的build.gradle:

android { 
    buildTypes { 
     debug { 
      manifestPlaceholders = [appName: APP_NAME_DEBUG] 
     } 
     release { 
      manifestPlaceholders = [appName: APP_NAME] 
     } 
    } 
} 

所以在AndroidManifest.xml

<application 
    ... 
    android:label="${appName}" 
    > 

是可能的。瞧!你有不同的應用程序名稱用於發佈和調試。

+1

在我看來,這是最好的方法,因爲它允許爲發佈版本('manifestPlaceholders = [appName:「@ string/app_name」]')提供一個本地化的應用程序名稱,以及用於調試版本的非本地化應用程序名稱。 – mtotschnig

相關問題