aoeu
aoeu

Reputation: 1167

How can I build an Android apk without Gradle on the command line?

I wrote an Android app that uses no dependencies or modules, has a single activity, and has a single layout file.

How can I build an apk file of my app on the command line without using Gradle (or other "build systems" or "dependency management" software)?

Upvotes: 26

Views: 18282

Answers (4)

alijandro
alijandro

Reputation: 12147

Use the following steps to build your apk manually, if you don't want use ant/gralde to build. But you must have Android SDK installed at least.

  • create R.java from aapt

  • use javac to compile all java source to *.class

  • use d8 (or dx in older SDKs) to convert all *.class to dex file, e.g output is classes.dex

  • create initial version of APK from assets, resources and AndroidManfiest.mk, e.g output is MyApplication.apk.unaligned

  • use aapt to add classes.dex generated in step 3 to MyApplication.apk.unaligned

  • use jarsigner to sign MyApplication.apk.unaligned with debug or release key

  • use zipalign to align the final APK, e.g output is MyApplication-debug.apk or MyApplication-release.apk if signing with release key

  • Done

I have created a sample script to do all the stuffs above, see here

Actually, Some articles have discussed this topic, see the following links.

https://www.apriorit.com/dev-blog/233-how-to-build-apk-file-from-command-line

https://spin.atomicobject.com/2011/08/22/building-android-application-bundles-apks-by-hand/

Upvotes: 46

Jack Bendtsen
Jack Bendtsen

Reputation: 114

A while back I stumbled across this thread after getting frustrated with both Android Studio and Gradle. Inspired by the answer from alijandro and this template from authmane512, I wrote a series of scripts to compile an Android app (including with dependencies/packages) in Java or Kotlin without any external build system.

Link: https://github.com/jbendtsen/tiny-android-template

There is a little bit of DIY involved here, but given that it's the sort of stuff that something like Gradle would do for you, I would argue that it's useful to know. Besides, it's like wayyyy less slow, and you have a lot more control how your app gets assembled.

Upvotes: 3

HemanthJabalpuri
HemanthJabalpuri

Reputation: 384

Try this for building apps with support libraries from command line. https://github.com/HemanthJabalpuri/AndroidExplorer

Upvotes: 3

rupashka
rupashka

Reputation: 399

alijandro gave a perfect answer. I managed to write simple ANT script that builds production APK with AdMob and without gradle usage. A couple useful comments:

  1. If you want to obfuscate classes you have to jar the compiled classes (between javac and dx steps) and run proguard on it

  2. For AdMob you have to extract the following jars from zip archives (like C:\Users\<User>\AppData\Local\Android\sdk\extras\google\m2repository\com\google\android\gms\play-services-ads\10.2.6\play-services-ads-10.2.6.aar):

    • play-services-ads-10.2.6.jar
    • play-services-ads-lite-10.2.6.jar
    • play-services-base-10.2.6.jar
    • play-services-basement-10.2.6.jar
    • play-services-clearcut-10.2.6.jar
    • play-services-gass-10.2.6.jar
    • play-services-tasks-10.2.6.jar

These archives should be passed in javac and dx

  1. For AdMob there are several additional simple config steps as well

Gradle does a lot of mess with android projects, so own script looks like a singular solution for projects that are going to go into production

Upvotes: 2

Related Questions