"Hello world" Android app with as few files as possible, no IDE, and text editor only
Yes you can easily do it ALL from the command line (NO IDE
involved, I promise).
This uses the old faithful Apache Ant. It does not use Gradle
, that takes more work.
To Summarize
What you type is (just 2 lines to produce an apk):
android create project --target "android-16" --path basj --activity TestActivity --package com.android.basj
(This produces an Apache Ant
build file called build.xml
file which is like the build.gradle
file. Now write some code but TestActivity.java is there already and will compile)
ant debug
Setup
(Note: The "android.bat
" command is deprecated since Build Tools v26, so use an old one (see link below), deprecated in this case means TOTALLY removed !{naughty Google}).
-
Install Java JDK if not installed already (you can use jdk-8u151-windows-x64.exe for example), and make sure
JAVA_HOME
environment variable is defined e.g.:JAVA_HOME=C:\Program Files\Java\jdk1.8.0_112
JAVA_PATH=C:\Program Files\Java\jre1.8.0_112\bin
JDK is the Java Development Kit.
JRE is the Java Run-time Environment.
Install
Android SDK Tools
(e.g. installer_r24.4.1-windows.exe, see this answer) if not already done, and then in the SDK Manager GUI, deselect everything and choose "Android SDK Build-Tools" (e.g.Android SDK Build-Tools 19.1
) + one (or many) platforms (e.g.Android 4.1.2 (API 16) JELLY_BEAN
). To prove you don't needAndroid Studio
, were not going to download it ! (only the SDK).Download Apache Ant (for example apache-ant-1.9.9-bin.zip)
Detail
To create a project from the command line using Android SDK
:
Decide on a place to put your project:
cd c:\android
mkdir antTest
cd antTest
Run the command:
C:\Android\sdk1\tools\android create project --target "android-16" --path basj --activity TestActivity --package com.android.basj
^
|
--------------+ (here's where I keep an old version of tools (version 25 in my case)
Here is the directory structure created (and all the files you need to build):
C:.
+---basj
+---bin
+---libs
+---res
¦ +---drawable-hdpi
¦ +---drawable-ldpi
¦ +---drawable-mdpi
¦ +---drawable-xhdpi
¦ +---layout
¦ +---values
+---src
+---com
+---android
+---basj
detailed output of create project:
Created project directory: C:\Android\antTest\basj
Created directory C:\Android\antTest\basj\src\com\android\basj
Added file C:\Android\antTest\basj\src\com\android\basj\TestActivity.java
Created directory C:\Android\antTest\basj\res
Created directory C:\Android\antTest\basj\bin
Created directory C:\Android\antTest\basj\libs
Created directory C:\Android\antTest\basj\res\values
Added file C:\Android\antTest\basj\res\values\strings.xml
Created directory C:\Android\antTest\basj\res\layout
Added file C:\Android\antTest\basj\res\layout\main.xml
Created directory C:\Android\antTest\basj\res\drawable-xhdpi
Created directory C:\Android\antTest\basj\res\drawable-hdpi
Created directory C:\Android\antTest\basj\res\drawable-mdpi
Created directory C:\Android\antTest\basj\res\drawable-ldpi
Added file C:\Android\antTest\basj\AndroidManifest.xml
Added file C:\Android\antTest\basj\build.xml
Added file C:\Android\antTest\basj\proguard-project.txt
Download Apache Ant from http://ant.apache.org/.
See this tutorial for setup:http://www.vogella.com/tutorials/ApacheAnt/article.html
Also see this tutorial:http://blog.vogella.com/2011/03/16/creating-android-applications-via-the-command-line-ant/
Write your code (Hello world).
Run this command and you get an Android Apk out the other side (called TestActivity-debug.apk):
ant debug
Hey presto, you got an android apk !
With new structure added:
C:.
├───bin
│ ├───classes
│ │ └───com
│ │ └───android
│ │ └───basj
│ ├───dexedLibs
│ └───res
│ ├───drawable-hdpi
│ ├───drawable-ldpi
│ ├───drawable-mdpi
│ └───drawable-xhdpi
├───gen
│ └───com
│ └───android
│ └───basj
For a final build :
ant release
If your interested in a more extensive example of Ant build.xml
, or DEX
files, and the deeper workings of Android look here
How to sign an already compiled apk
See how to sign an already compiled apk and also this
From an answer by @for3st here's a relevant piece of that post:
Manual Process:
Step 1: Generate Keystore (only once)
You need to generate a keystore once and use it to sign your unsigned
apk.
Use the keytool
provided by the JDK found in %JAVA_HOME%/bin/
keytool -genkey -v -keystore my.keystore -keyalg RSA -keysize 2048 -validity 10000 -alias app
Step 2 or 4: Zipalign
zipalign
which is a tool provided by the Android SDK found in e.g. %ANDROID_HOME%/sdk/build-tools/24.0.2/
is a mandatory optimization step if you want to upload the apk to the Play Store.
zipalign -p 4 my.apk my-aligned.apk
Note: when using the old jarsigner
you need to zipalign
AFTER signing. When using the new apksigner
method you do it BEFORE signing (confusing, I know). Invoking zipalign
before apksigner
works fine because apksigner
preserves APK
alignment and compression (unlike jarsigner
).
You can verify the alignment with:
zipalign -c 4 my-aligned.apk
Step 3: Sign & Verify
Using build-tools 24.0.2 and older
Use jarsigner
which, like the keytool, comes with the JDK distribution found in %JAVA_HOME%/bin/
and use it like so:
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my.keystore my-app.apk my_alias_name
and can be verified with
jarsigner -verify -verbose my_application.apk
Using build-tools 24.0.3 and newer
Android 7.0
introduces APK Signature Scheme v2
, a new app-signing scheme that offers faster app install times and more protection against unauthorized alterations to APK files (See here and here for more details). Therefore, Google
implemented their own apk
signer called: apksigner
(duh!)
The script file can be found in %ANDROID_HOME%/sdk/build-tools/24.0.3/
(the .jar is in the /lib
subfolder). Use it like this:
apksigner sign --ks my.keystore my-app.apk --ks-key-alias alias_name
and can be verified with:
apksigner verify my-app.apk
This is a ready-to-use method to build an Android app without having to install/open Android Studio even once (it's a cool IDE, but some people like me just prefer a text editor + command line). You'll get a fully signed/aligned APK at the end, ready to go on the Google Play Store.
Full credit to JonGoodwin's
answer, I just summarized it here with a single createproject.bat
batch that does everything.
Prerequisites (see his answer for more details about them): you need to have these tools installed:
-
Java JDK
-
Android SDK Tools
-
Apache Ant
Now just modify the first lines of this createproject.bat
to set your own APPNAME
, VENDORNAME
, and change the path of adb.exe
, keytool.exe
, etc. according to your system.
Then run createproject.bat
. It will create a new folder helloworld
. You'll find a few .bat
files there that will build your app!
createproject.bat
@echo off
SET APPNAME=helloworld
SET VENDORNAME=demo
SET SIGNKEYPASSWORD=abcdef12
SET ANTBATPATH="..\..\apache-ant-1.9.9-bin\bin\ant.bat"
SET ADBPATH="C:\Users\User\AppData\Local\Android\android-sdk\platform-tools\adb.exe"
SET KEYTOOLPATH="C:\Program Files\Java\jdk1.8.0_151\bin\keytool.exe"
SET JARSIGNERPATH="C:\Program Files\Java\jdk1.8.0_151\bin\jarsigner.exe"
SET ZIPALIGNPATH="C:\Users\User\AppData\Local\Android\android-sdk\build-tools\19.1.0\zipalign.exe"
SET ANDROIDBATPATH="C:\Users\User\AppData\Local\Android\android-sdk\tools\android.bat"
call %ANDROIDBATPATH% create project --target "android-16" --path %APPNAME% --activity %APPNAME% --package com.%VENDORNAME%.%APPNAME%
(
echo call %ANTBATPATH% debug
echo copy bin\*debug.apk .
) > %APPNAME%\1makedebug.bat
echo %ADBPATH% logcat > %APPNAME%\2adb_logcat.bat
echo %ADBPATH% devices > %APPNAME%\2adb_devices.bat
echo %ADBPATH% install -r %APPNAME%-debug.apk > %APPNAME%\2adb_install.bat
echo %ADBPATH% shell > %APPNAME%\2adb_shell.bat
(
echo call %ANTBATPATH% release
echo %JARSIGNERPATH% -sigalg SHA1withRSA -digestalg SHA1 -keystore my.keystore "bin\%APPNAME%-release-unsigned.apk" app -storepass %SIGNKEYPASSWORD%
echo %ZIPALIGNPATH% 4 "bin\%APPNAME%-release-unsigned.apk" "%APPNAME%-release.apk"
echo pause
) > %APPNAME%\3makerelease_signed.bat
%KEYTOOLPATH% -genkey -keystore %APPNAME%\my.keystore -keyalg RSA -keysize 2048 -validity 10000 -alias app -dname "cn=Unknown, ou=Unknown, o=Unknown, c=Unknown" -storepass %SIGNKEYPASSWORD% -keypass %SIGNKEYPASSWORD%
echo Finished.
pause
What is the smallest number of minimalist Java source code files/project files to produce an .apk Android app?
Only these 2 files are required to build android Apk file classes.dex
and AndroidManifest.xml
, check out
this blog post for complete info .
The smallest apk size made till now is 678 bytes.check out this repo