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的安全問題