So far I have been focusing on my application's programming and paid little attention to making the build process smarter. Thus I have been doing things pretty much manually (the "dumb way"), including updating by hand android:versionCode
and android:versionName
in AndroidManifest.xml.
I would like now to automatically (i.e. upon Build or upon Export):
git
the latest tag/branch containing build and version codes.I found a few clues about a "pre-build step", builders and build.xml, but I have no idea where to find those and where to start.
Any tips or pointers on where I could find more information on the subject? (a step-by-step tutorial would be ideal)
Update 1: I found this thread to be suggesting that I:
Properties > Builders
Fine, but where is the project's Ant build file? Where do I find it?
Update 2: Apparently, it's possible to export the entire project into an Ant file. But I am not sure that's I want. Must a pre-build step always include an Ant build file?
Update 3: Is building an Ant file, only for the pre-build step, the right approach?
versionCode — A positive integer used as an internal version number. This number is used only to determine whether one version is more recent than another, with higher numbers indicating more recent versions. This is not the version number shown to users; that number is set by the versionName setting, below.
Your APK or Android App Bundle file can contain just one AndroidManifest. xml file, but your Android Studio project may contain several—provided by the main source set, build variants, and imported libraries.
Here's what I use to dynamically assign a versionCode and versionName to AndroidManifest.xml. It works only when building with ant, so you'll have to install it first. Then go to the project directory in your command line and execute "android update project -p .", which will create the necessary files for building with ant, like local.properties and build.xml.
Then open build.xml and place this inside:
<target name="-pre-build" depends="-custom-git-version,-custom-manifest-version"> </target> <!-- Packages the application. --> <target name="-post-build"> <antcall target="-custom-restore-manifest"/> <property name="suffix" value="${git.commits}-${git.version}.apk" /> <exec executable="sed" inputstring="${out.final.file}" outputproperty="out.final.renamedfile"> <arg value="s/\.apk/-${suffix}/" /> </exec> <copy file="${out.final.file}" tofile="${out.final.renamedfile}" /> <echo>Final file copied to: ${out.final.renamedfile}</echo> </target> <!-- Custom targets --> <target name="-custom-git-version"> <exec executable="sh" outputproperty="git.commits"> <arg value="-c" /> <arg value="git log --pretty=format:'' | wc -l" /> </exec> <echo>git.commits: ${git.commits}</echo> <exec executable="git" outputproperty="git.version"> <arg value="describe" /> <arg value="--tags" /> <arg value="--long" /> </exec> <echo>git.version: ${git.version}</echo> </target> <target name="-custom-manifest-version"> <echo>Creating backup of AndroidManifest.xml</echo> <copy file="AndroidManifest.xml" tofile="AndroidManifest.xml.antbak" preservelastmodified="true" /> <replaceregexp file="AndroidManifest.xml" match='android:versionCode="(\d+)"' replace='android:versionCode="${git.commits}"' /> <replaceregexp file="AndroidManifest.xml" match='android:versionName="(\d+\.\d+)\.\d+"' replace='android:versionName="\1.${git.commits}"' /> </target> <target name="-custom-restore-manifest"> <echo>Restoring backup of AndroidManifest.xml</echo> <move file="AndroidManifest.xml.antbak" tofile="AndroidManifest.xml" preservelastmodified="true" overwrite="true" /> </target>
The output of this is not exactly what you want, but it is a start - feel free to modify it :) The result is something like "yourapp--.apk
Using this you'll build your application with executing "ant clean debug", or "ant clean release", depending on what you want. You can also create "ant.properties" file with this content:
key.store=keystore_file key.store.password=some_password key.alias=some_alias key.alias.password=some_other_password
to enable automatic signing of your app.
You should also read this: http://developer.android.com/tools/building/building-cmdline.html
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With