Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to compile APK from command line?

Tags:

I am interested in making Android apps on demand. Depending on the clients request, my web site would send me a JSON file direct to a Windows application that I have created in Delphi. This one would save the file inside the Android app source folder and then, execute a command line telling the Android compiler to generate the APK file and send it to my client, all that without my presence.

The Android project was made with MotoDev. And it uses the Android SDK that is in my root.

How should I configure the command line to achieve this from inside my Delphi program?

I will also need to change the manifest to put a new version number so it does not conflict with other clients version.

like image 992
NaN Avatar asked Mar 08 '13 01:03

NaN


People also ask

How do I make an apk file?

To generate a signed APK file, open the Build menu from the toolbar and select Generate Signed Bundle/APK. This opens up a screen where you have to select between creating an Android App Bundle and creating an APK file. Check the APK radio button and proceed to the next window.

What is the correct command to create an apk from Android program?

Build a debug APK This creates an APK named module_name -debug. apk in project_name / module_name /build/outputs/apk/ . The file is already signed with the debug key and aligned with zipalign , so you can immediately install it on a device.

What is gradlew command?

gradlew is a wrapper(w - character) that uses gradle . Under the hood gradlew performs three main things: Download and install the correct gradle version. Parse the arguments. Call a gradle task.

What does gradlew assembleDebug do?

For instance, to build a debug version of your Android application, you can run ./gradlew assembleDebug from the root of your repository. In a default project setup, the resulting apk can then be found in app/build/outputs/apk/app-debug.


2 Answers

Android uses the Ant build system, so you can create a build.xml and build.properties file for your project.

You'll need to create the build.xml file first though:

android update project -p . 

This will generate a build.xml file. You should probably customize the build steps and targets for your project. A good idea in your case would be to have the build.properties file generated by your website for the specific build... Then include it via the build.xml file. In particular, you will need to specify in the build.properties file where the signing keys are, and what the password is:

Build.Properties:

key.store=keystore.dat key.alias=signing_key key.store.password=password123 key.alias.password=password123 

The build process using ant also allows you to do variable replacements in Java files, which might be another idea. It would allow you to customize the build process further on a client by client basis.

By default, the build is triggered by:

ant clean ant release 

Another neat idea: Have Ant copy the resulting APK file to a network share accessible by the website by placing a < copy ... /> line in the < target name="release" > section.

like image 57
Andrew Cranston Avatar answered Oct 20 '22 16:10

Andrew Cranston


Create build.xml at project creation time

If you start a new project with:

android create project \     --target 1 \     --name MyName \     --path . \     --activity MyActivity \     --package com.yourdomain.yourproject 

the build.xml file used by ant will be generated.

The android tool is present in the tools/ directory of the SDK which you downloaded.

Create debug releases

Besides:

ant release 

for final releases, you can also create debug releases with:

ant debug 

Location of generated apk

Generated apk are placed under bin/.

The most important outputs are:

MyName-debug.apk MyName-release.apk 

but some intermediate apks are also generated, in particular unaligned and unsigned versions.

But most of the time you can forget where they were created and just run:

ant debug install ant release install 

to get them installed. But make sure it is working with adb first: adb devices command not working

Tested on Ubuntu 15.10, Android 23.