How to build .apk file from command line

Created on Wednesday, 29 June 2011 14:32

If you don’t want to install a number of programs for building your Android project, this article is for you. You will need only JDK, the Android SDK platform tools and minimum Android platform for building the project using the batch file.

  • Introduction
  • Preparation
    • Java JDK
    • Android SDK
    • Environment Variables
    • Private Key for Signing
    • Example Files Structure
  • Command Sequence
  • Resources

1. Introduction

In this article, I will describe how to use the Android tools for building the .apk file using the command line. As a result, you can use the batch file for building your Android application. I use Windows commands in this article. But you can use the same Android commands and tools and the same program if you are working on Linux OS. The example of the script for Linux OS is included in the sample project, attached to this article.

2. Preparation

You must install Java JDK and Android SDK on the system where you will build your Android application using the Windows command line. The private keystore also must be present.

2.1 Java JDK

You can use Java JDK from Eclipse or download it from this link: http://www.oracle.com/technetwork/java/javase/downloads/index.html and then install it.

2.2 Android SDK

Android SDK and its HOWTO document are available here: http://developer.android.com/sdk/index.html.

The Android SDK Platform-tools, SDK Platform Android 2.2, and API 8 are the minimum that is needed for the test project work.

Do you like our specialists' work? Make them work for you!

2.3 Environment Variables

If you want to have a readable batch script and a program without very long file path definitions, you should use the environment variables. I recommend you to define the following ones:

  • JAVABIN path to the Java JDK bin folder. For example: C:\Program Files\Java\jdk\bin. This folder must contain the javac.exe and jarsigner.exe files.
  • ANDROID-SDK path to the Android SDK folder. For example: C:\Program Files\Andoroid\android-sdk-windows.

2.4 Private Key for Signing

You can read everything about signing, creating private key, and other operations here: http://developer.android.com/guide/publishing/app-signing.html

In this article, I describe only one important command that will generate my-release-key.keystore:

%JAVABIN%\keytool  -genkey -v -keystore  my-release-key.keystore -alias alias_name  -keyalg RSA -keysize 2048  -validity 10000

Specify your info and you will receive the my-release-key.keystore file. You must remember the password. You will need it  later. Also, I recommend you to put the keystore file in the same folder as the project. In the example,It is in the keystore folder in the project directory.

2.5 Example Files Structure

You must remember that the dx Android tool requires the full path, which MUST not contain any spaces. So, check the fact, that your project path satisfies the requirement.

The file structure of the example project, which is built using the build.bat file, is the following:

SecureMessages/
assets/
keystore/
my-release-key.keystore
res/
drawable-hdpi/
icon.png
drawable-ldpi/
icon.png
drawable-mdpi/
icon.png
layout/
main.xml
values/
strings.xml
src/
org/
secure/
sms/
SecureMessagesActivity.java
StringCryptor.java
SmsReceiver.java
AndroidManifest.xml
build.bat // Windows build script
build.sh // Linux build script

3. Command Sequence

The following commands are for the Windows OS, but you can find the script for the Linux OS project building in the attached sample.

First of all, we must save current path. Then we must change the CD variable to the path to the build.bat file:

SET PREV_PATH=%CD%
cd /d %0\..

Then, bin and gen old folders should be recreated:

rmdir "bin" /S /Q
rmdir "gen" /S /Q
mkdir "bin"
mkdir "gen"

I add some definitions. They make the batch file readable and easy to update. So, I recommend you the following definitions:

  • minimum Android revision;
  • the path to aapt Android tool and its arguments for adding files into the existing archive;
  • the path to aapt Android tool and its arguments for packing and generating resources;
  • the path to dx Android tool;
  • the path to javac utility of JDK.

This list of independent definitions can be used for building the majority of Android projects (of course, with the changed Android revision value). For example:

SET ANDROID_REV=android-8
SET ANDROID_AAPT_ADD="%ANDROID-SDK%\platforms\%ANDROID_REV%\tools\aapt.exe" add
SET ANDROID_AAPT_PACK="%ANDROID-SDK%\platforms\%ANDROID_REV%\tools\aapt.exe" package -v -f -I "%ANDROID-SDK%\platforms\%ANDROID_REV%\android.jar"
SET ANDROID_DX="%ANDROID-SDK%\platform-tools\dx.bat" --dex
SET JAVAC="%JAVABIN%\javac.exe" -classpath "%ANDROID-SDK%\platforms\%ANDROID_REV%\android.jar"

Also I need the defined variables for my project:

  • APP_NAME is the name of application that will be used for the output APK file.
  • JAVAC_BUILD and JAVAC are the same commands, but there are path to the sources, generated R class, and output folder in JAVAC_BUILD.

These variables let us change the project name and paths to the sources easier.

SET APP_NAME=SecureSms
SET JAVAC_BUILD=%JAVAC% -sourcepath "src;gen" -d "bin"

And now, all preparations are finished and the application can be built. The R file will be generated using aapt tool. All resources will be packed into the resources.ap_ file:

call %ANDROID_AAPT_PACK% -M "AndroidManifest.xml" -A "assets" -S "res" -m -J "gen" -F "bin\resources.ap_"

Android manifest file, res and assets folder are the input data. Aapt will generate the R class and put it into the gen folder. Then, aapt will pack the resource files into the resourses.ap_ file.

Every folder that contains *.java file must be called with javac. In my example, there is only one folder with javac. So, I have only one command line for building sources:

call %JAVAC_BUILD% src\org\secure\sms\*.java

As you remember, the JAVAC_BUILD command has already contained the arguments that specify the bin folder. The bin folder is an output folder for the compiled sources.

At this moment, the sources have been compiled successfully and they can be packed in the special dex file:

call %ANDROID_DX% --output="%CD%\bin\classes.dex" %CD%\bin

For the application signing, the resources file must be copied to another file, which will be used for the signing:

copy "%CD%\bin\resources.ap_" "%CD%\bin\%APP_NAME%.ap_"

The classes.dex file must be added to the new file that has an ap_ extension

call %ANDROID_AAPT_ADD% "%CD%\bin\%APP_NAME%.ap_" "%CD%\bin\classes.dex"

Now, the ap_ file is a correct apk file. But it is not signed yet and it cannot be installed to the Android device.

The creation of the signed Android application from the *.ap_ file is the following (Output file name must differ from the input file name – in this case the file extension is changed to the  *.apk):

call "%JAVABIN%\jarsigner" -keystore "%CD%\keystore\my-release-key.keystore" -storepass "password" -keypass "password" -signedjar "%CD%\bin\%APP_NAME%.apk" "%CD%\bin\%APP_NAME%.ap_" "alias_name"

And delete temp ap_ file:

del "bin\%APP_NAME%.ap_"

Finally, let’s return to the start folder and clear local variables:

:EXIT
cd "%PREV_PATH%"
ENDLOCAL
exit /b %ERRORLEVEL%

To test the example, you must:

  • unpack it
  • do the steps 2.1-2.5 from the Preparations paragraph
  • run the build.bat file

4. Resources

Android Developer reference: http://developer.android.com

Download Sample Project Sources (ZIP, 19 KB)

Do you like our specialists' work? Make them work for you!

How to build .apk file from command line(转)的更多相关文章

  1. IAR Build from the command line 环境变量设置

    http://supp.iar.com/Support/?Note=47884 Technical Note 47884 Build from the command line The alterna ...

  2. Building Xcode iOS projects and creating *.ipa file from the command line

    For our development process of iOS applications, we are using Jenkins set up on the Mac Mini Server, ...

  3. How to output the target message in dotnet build command line

    How can I output my target message when I using dotnet build in command line. I use command line to ...

  4. Yandex Big Data Essentials Week1 Unix Command Line Interface File Content exploration

    cat displays the contents of a file at the command line copies or apppend text file into a document ...

  5. how to import a SQL file in MySQL command line

    how to import a SQL file in MySQL command line execute .sql file, macOS $mysql> source \home\user ...

  6. How to Use Android ADB Command Line Tool

    Android Debug Bridge (adb) is a tool that lets you manage the state of an emulator instance or Andro ...

  7. [笔记]The Linux command line

    Notes on The Linux Command Line (by W. E. Shotts Jr.) edited by Gopher 感觉博客园是不是搞了什么CSS在里头--在博客园显示效果挺 ...

  8. An annotation based command line parser

    Java命令行选项解析之Commons-CLI & Args4J & JCommander http://rensanning.iteye.com/blog/2161201 JComm ...

  9. Creating Node.js Command Line Utilities to Improve Your Workflow

    转自:https://developer.telerik.com/featured/creating-node-js-command-line-utilities-improve-workflow/ ...

随机推荐

  1. 使用批处理文件在FTP服务器 上传下载文件

    1.从ftp服务器根目录文件夹下的文件到指定的文件夹下 格式:ftp -s:[配置文件] [ftp地址] 如:ftp -s:c:\vc\ftpconfig.txt   192.168.1.1 建立一个 ...

  2. HTTP Method 之 Post VS. Get

    引言 WebAPI 现在非常火的轻量服务框架,因其使用得使用了Http协议,并且具备了可协商内容(生成不同内容格式)等优势,所以在互联网业务中被广泛使用. 那作为HTTP最常用的两个方法Get和Pos ...

  3. cookie 跨域访问的解决方案

    Cookie 同域单点登录  最近在做一个单点登录的系统整合项目,之前我们使用控件实现单点登录(以后可以介绍一下).但现在为了满足客户需求,在不使用控件情况下实现单点登录,先来介绍一下单点登录.    ...

  4. ACCELEROMETER

    顾名思义,是加速感应器.有2种应用吧:1,电脑保护,例如当笔记本掉落时,可以被自动检测到,此时会自动关闭硬盘操作以保护数据不在强烈冲击时丢失.

  5. Lambert(朗伯)光照模型 和Half Lambert的区别

    Lambert-它不包括任何任何镜面属性,对粗糙物体来说,这项属性是非常有用的,它不会反射出周围的环境.Lambert材质可以是透明的,在光线追踪渲染中发生折射,但是如果没有镜面属性,该类型就不会发生 ...

  6. Intellij IDEA 快捷键整理

    CSDN 2016博客之星评选结果公布      [系列直播]算法与游戏实战技术      "我的2016"主题征文活动 Intellij IDEA 快捷键整理(TonyCody) ...

  7. [LeetCode] Evaluate Division 求除法表达式的值

    Equations are given in the format A / B = k, where A and B are variables represented as strings, and ...

  8. [LeetCode] Two Sum III - Data structure design 两数之和之三 - 数据结构设计

    Design and implement a TwoSum class. It should support the following operations:add and find. add - ...

  9. [LeetCode] Evaluate Reverse Polish Notation 计算逆波兰表达式

    Evaluate the value of an arithmetic expression in Reverse Polish Notation. Valid operators are +, -, ...

  10. 在Windows7上如何找到Cookie(亲测100%可找到)

    摘要 出于兴趣爱好,前一阵子做了一个网页,网页中需要用到Cookie,但是,根据书上的说明,并没有找打教材中所说的Cookie的位置,本文就主要介绍在计算机(Win7)中Cookie的存放位置,同样适 ...