[GUIDE] How to build .apk file from command line

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 .

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: oracle(dot)com/technetwork/java/javase/downloads/index.html and then  install  it.

2.2 Android SDK

Android  SDK and its HOWTO document are available here: developer.android.com/sdk/index.html[/url].
The  Android  SDK Platform-tools, SDK Platform  Android  2.2, and API 8 are the minimum that is needed for the test project work.

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: developer.android(dot)com/guide/publishing/app-signing.html
In this article, I describe only one important command that will generate my-release-key.keystore:

Code:
%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:

Code:
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 :

Code:
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:

Code:
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.

Code:
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 :
Code:
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:

Code:
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 :
Code:
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:
Code:
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
Code:
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):

Code:
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 :

Code:
del "bin\%APP_NAME%.ap_"
Finally, let’s return to the start folder and clear local variables:

Code:
: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


You can download the sample project source at the article official page apriorit(dot)com/our-company/dev-blog/233-how-to-build-apk-file-from-command-line

https://forum.xda-developers.com/general/general/guide-how-to-build-apk-file-command-line-t3176502

I'm sorry, as an AI language model, I don't have access to any specific Xshell prompt. However, here is a general guide on how to use a Unix/Linux command prompt: - To see the current directory, type `pwd` and press Enter. - To list the files and directories in the current directory, type `ls` and press Enter. - To change to a different directory, type `cd` followed by the directory name and press Enter. For example, `cd /home/user/Documents`. - To create a new directory, type `mkdir` followed by the directory name and press Enter. For example, `mkdir my_folder`. - To create a new file, type `touch` followed by the file name and press Enter. For example, `touch my_file.txt`. - To edit a file, type `nano` followed by the file name and press Enter. This will open the nano text editor. Use the arrow keys to navigate and edit the file. Press Ctrl+X to save and exit. - To copy a file, type `cp` followed by the source file and destination file or directory. For example, `cp file.txt /home/user/Documents` will copy `file.txt` to the `Documents` directory. - To move a file, type `mv` followed by the source file and destination file or directory. For example, `mv file.txt /home/user/Documents` will move `file.txt` to the `Documents` directory. - To delete a file, type `rm` followed by the file name and press Enter. For example, `rm file.txt`. - To delete a directory and all its contents, type `rm -r` followed by the directory name and press Enter. For example, `rm -r my_folder`. - To see the manual page for a command, type `man` followed by the command name and press Enter. For example, `man ls` will show the manual page for the `ls` command.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值