Android in Hudson (7) 產生release apk

Android in Hudson (7) 產生release apk

Android程式在publish之前都必須經過sign的動作,
閱讀前面提到的ant_rules_r3.xml的內容後,會發現有一個target是release,可以幫助你編譯專案與sign你的apk,
可惜的是在執行這個target的時候,他會要求你輸入key的相關資訊,由於我想讓hudson幫我透過ant直接完成這個動作,
我新增了一個daliy-release的target並依據預設release的內容修改如下:

<!-- release with sign -->
   <target name="daily-release" depends="-set-release-mode, -package-release" >
        <!-- Signs the APK -->
        <echo>Signing final apk...</echo>
        <signjar
                jar="${out.unsigned.file}"
                signedjar="${out.unaligned.file}"
                keystore="${key.store}"
                storepass="${key.store.password}"
                alias="${key.alias}"
                keypass="${key.alias.password}"
                verbose="${verbose}" />

        <!-- Zip aligns the APK -->
        <zipalign-helper in.package="${out.unaligned.file}"
                                   out.package="${out.release.file}" />
        <echo>Release Package: ${out.release.file}</echo>
      <mkdir dir="${out.folder}"/>
       <tstamp>
         <format property="NOW.TIMESTAMP" pattern="yyyy-MM-dd-hhmm" locale="zh,TW"/>
      </tstamp>
      <move file="${out.release.file}" tofile="${out.folder}/${ant.project.name}/${ant.project.name}-${NOW.TIMESTAMP}.apk"/>
 </target>

你會發現其實跟原本release相差不遠,我只是把要求輸入key的相關資訊那一段拿掉罷了,並將他改成property如下:

<!-- Sign apk -->
   <property name="key.store" value="your key.store" />
   <property name="key.store.password" value="your key store password" />
   <property name="key.alias" value="your key store alias" />
   <property name="key.alias.password" value="your key store alias password" />
   <property name="has.keystore" value="true" />
   
<!-- daily build apk folder -->
<property name="out.folder" value="path to you want" />

在產生release apk後,理所當然應要搬去其他地方存放,不然每次build的時候都會蓋過去,因此你會發現上面多了搬移檔案的動作並用日期時間作為檔名

<mkdir dir="${out.folder}"/>
<tstamp>
  <format property="NOW.TIMESTAMP" pattern="yyyy-MM-dd-hhmm" locale="zh,TW"/>
</tstamp>
<move file="${out.release.file}" tofile="${out.folder}/${ant.project.name}

如此一來,我們就能透過執行daliy-release這個target來產生daliy release並保存,讓我們隨時都可以找到一個版本用。

註:這裡不考慮把key的資訊放在build.xml的安全問題