2017-08-10 71 views
0

我最近已將Eclipse從Eclipse移植到Android Studio,並且經過一番努力後應用程序已啓動並正在運行。現在我面臨第二個障礙 - 生成應用程序的白色標籤版本。我已經閱讀了我在Android Studio中的Flavor機制中可以找到的所有內容,我相信它可以工作,但我仍然有很少的問題。使用Android Studio Flavors的Android白色標籤

但是,首先讓我解釋一下我們使用Ant的當前白色標籤機制(由於支持庫的升級,我不認爲我可以再使用它了,因爲它確實需要lib文件夾中存在Jar文件?)。這個Ant腳本讀取一個build.xml文件,我們已經指定了新值的位置(strings.xmlcolors.xml)以及特定於白色標籤的資源文件夾(圖像等)。它基本上覆制新文件(只有少數不同),然後運行構建,重命名APK併爲其提供新的應用程序ID。因此,我可以一舉按下一個按鈕就可以建立100個白色標籤。包含在這個版本里的是一個複製機制,它創建了一個與它相關版本的新版APK的副本,所以如果基本的風格是MYAPP.apk,而且我們在版本44上,它會複製它並製作一個44-MYAPP.apk,我們需要爲那些直接從我們的S3而不是GooglePlay提供支持的客戶進行回滾 - 是的,這是他們中的一些人的要求。

我想我可以模仿這個最有味道,有以下幾個問題:

  1. 我希望所有這些版本具有相同的版本名稱和版本代碼。如果我將flavor配置值留空,他們是否會從AndroidManifest.xml文件中選取版本?

  2. 是否有可能讓每個APK在生成時都有自己的應用程序名稱,例如AppHeyYou.apkWhereIsThat.apk是否有另一種風格?我看到的例子似乎在APK名稱末尾添加了一個後綴,我需要一個全新的APK名稱(並且沒有添加「Release」)。

  3. 我可以把它打造的香味,然後將它複製並使用從AndroidManifest.xml或默認配置的版本將其重命名(如MyApp.apk,並複製到44-MyApp.apk)?由於接近100,所以在每個版本配置中改變這一點對於每個版本都是不切實際的。

  4. 有沒有一種方法可以通過單擊按鈕來強制生成所有白色標籤。再一次,爲每個做這件事都是不切實際的。

感謝您的幫助!

UPDATE

只要是有幫助的,我想我會呈現什麼我結束了全部劇本的gradle。這裏是做什麼的:

  1. 定義口味
  2. 在構建他們,讓他們的味道的名字,但在前面上漲的版本代碼(這樣紅味,版本號44變爲「44 -Red.apk「)。

最後我的構建。gradle這個爲應用程序是這樣的:

buildscript { 
    repositories { 
     maven { url 'https://maven.fabric.io/public' } 
    } 

    dependencies { 
     classpath 'io.fabric.tools:gradle:1.+' 
    } 
} 
apply plugin: 'com.android.application' 
apply plugin: 'io.fabric' 

repositories { 
    maven { url 'https://maven.fabric.io/public' } 
} 


android { 
    compileSdkVersion 25 
    buildToolsVersion '25.0.2' 
    defaultConfig { 
     applicationId "com.mycompany.ourapp" 
     minSdkVersion 14 
     targetSdkVersion 23 
     versionCode 62 
     versionName "1.0.62" 
     compileOptions { 
      sourceCompatibility JavaVersion.VERSION_1_7 
      targetCompatibility JavaVersion.VERSION_1_7 
     } 
     signingConfig signingConfigs.config 
    } 
    buildTypes { 
     release { 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' 
     } 
    } 
    productFlavors { 
     Red { 
      setProperty("archivesBaseName", "red") 
     } 
     Blue { 
      setProperty("archivesBaseName", "blue") 
     } 
    } 


    applicationVariants.all { variant -> 
     variant.outputs.each { output -> 
      def path = "C:/AndroidBuilds/MyCompany.Build/" + "/" 
      def SEP = "-" 
      def flavor = variant.productFlavors[0].name 
      def version = variant.versionCode 
      def newApkName = path + version + SEP + flavor 
      def newApkNameNoVersion = path + flavor 
      output.outputFile = new File(newApkName + ".apk") 

    } 
} 

dependencies { 
    } 
} 

當我得到了所有的白色標籤的工作和自動運行,我會釘,關於這一點。

+0

#1,是的,雖然這將是簡單的只是定義它們在搖籃構建文件。 #2和#3似乎彼此直接衝突。 #4是'gradle assembleRelease',雖然將它綁定到一個「按鈕」(無論是一個GUI按鈕還是一個機械開關)取決於你。另外,請記住,您可以創建自定義的Gradle任務,並且可以從外部程序(例如Ruby腳本)執行Gradle構建過程,您可以在其中執行任何您想要的操作。 – CommonsWare

+0

#2和#3的想法是讓每種口味都有自己的APK名稱。所以如果我的口味是「Red」和「Blue」,那麼在生成APK時我總共會得到4個文件。如果版本是33,則名稱看起來像 - Red.apk,33-Red.apk,Blue.apk和33-Blue.apk。從歷史上看(我與這種方法無關),新版本具有相同的名稱,所以如果我們想要回滾,我們將代碼版本重命名爲通用名稱。之所以這麼做,是因爲大多數用戶並沒有從Google Play中獲得口味,而是從S3上的鏈接中獲益。我無法撤銷這種方法,所以我必須複製它(我希望我可以!) –

回答

1

我不知道藝術的gradle精確條款道歉,但是...

我希望所有這些版本具有相同的版本名稱和版本代碼。如果我將flavor配置值留空,他們是否會從AndroidManifest.xml文件中選取版本?

如果不指定在productFlavors塊,不管你在defaultConfig塊定義versionCodeversionName將被應用。

是否有可能讓每個APK在生成時都有自己的應用程序名稱,例如AppHeyYou.apk和WhereIsThat.apk是否有其他的風格?我看到的例子似乎在APK名稱末尾添加了一個後綴,我需要一個全新的APK名稱(並且沒有添加「發行版」)。

查看applicationVariants屬性。它可以讓你喜歡寫東西

applicationVariants.all { variant -> 
    variant.outputs.each { output -> 
     def newName = [build your filename here] 
     output.outputFile = new File(output.outputFile.parent, newName); 
    } 
} 

我可以把它打造的香味,然後將它複製並使用的版本從將其重命名(如MyApp.apk和複製到44 MyApp.apk) AndroidManifest.xml還是默認配置?由於接近100,所以在每個版本配置中改變這一點對於每個版本都是不切實際的。

在上面applicationVariants.all塊,你可以訪問defaultConfig.versionCode.versionName創建與包括版本信息文件名複製。

有沒有一種方法可以通過單擊按鈕來強制生成所有白色標籤。再一次,爲每個做這件事都是不切實際的。

我相信你可以運行命令gradlew assemble。運行gradlew tasks輸出這(和很多其他的任務):

Build tasks 
----------- 
assemble - Assembles all variants of all applications and secondary packages. 
+0

謝謝!我會做,看看我能不能做這個工作。最後一個問題 - 它是否也可以將它們推入不同的目錄(在輸出下)?這將允許我編寫一個自動將它們移動到S3的進程。 –

+0

優秀的建議。得到它所有的工作,只需要得到白色標籤dirs和自動運行的所有。謝謝! –