-
Notifications
You must be signed in to change notification settings - Fork 0
/
Building an Android App from the Command Line (2020-01-07 00_44_06).html
322 lines (302 loc) · 166 KB
/
Building an Android App from the Command Line (2020-01-07 00_44_06).html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html style lang=en><!--
Page saved with SingleFile
url: https://www.hanshq.net/command-line-android.html
saved date: Wed Jan 08 2020 00:44:06 GMT+0100 (Central European Standard Time)
info: https://www.hanshq.net/command-line-android.html
--><meta charset=utf-8>
<title>Building an Android App from the Command Line</title>
<style>body{text-align:center;margin-top:0px;padding-bottom:10px;background-color:#ededed;color:#000;font-family:"DejaVu Serif","Times New Roman",Times,serif;font-size:12pt;line-height:1.6}h1,h2{font-family:"DejaVu Sans",Arial,Helvetica,sans-serif;line-height:1.2}a{color:blue;text-decoration:none}a:hover{text-decoration:underline}a:visited{color:#00b}a img{border:0}div#main{margin:auto;padding:0px;background:#fff;border-width:1px;border-color:#000;border-style:none solid solid solid;width:100%}img#header{width:100%}@media (min-width:920px){div#main{width:900px}img#header{width:900px;height:338px}}div#container{margin-left:10px;margin-right:20px;margin-bottom:10px}div#center{text-align:center;margin:2em}span.date{color:#999;font-size:11pt}ul{list-style:square}div#left{text-align:left}div#footer{font-family:"DejaVu Sans",Arial,Helvetica,sans-serif;clear:both;font-size:9pt;color:#999}div#footer a{color:#999}pre,span.code{font-size:10pt;font-family:"DejaVu Sans Mono","Courier New",Courier,monospace;line-height:1.0}pre{margin-left:2em;margin-right:2em;overflow-x:auto;padding-bottom:1ex}div.latex{overflow-x:auto}.k{color:#008000;font-weight:bold}.o{color:#666}.cp{color:#bc7a00}.go{color:gray}.gp{color:navy;font-weight:bold}.kd{color:#008000;font-weight:bold}.kn{color:#008000;font-weight:bold}.kt{color:#b00040}.m{color:#666}.s{color:#ba2121}.na{color:#7d9029}.nb{color:#008000}.nc{color:#00f;font-weight:bold}.nd{color:#a2f}.nf{color:#00f}.nn{color:#00f;font-weight:bold}.nt{color:#008000;font-weight:bold}.nv{color:#19177c}.mi{color:#666}.s2{color:#ba2121}.se{color:#b62;font-weight:bold}.si{color:#b68;font-weight:bold}</style>
<link rel=alternate type=application/rss+xml href=https://www.hanshq.net/feed.rss>
<meta name=viewport content="width=device-width, initial-scale=1">
<link type=image/x-icon rel="shortcut icon" href=data:image/vnd.microsoft.icon;base64,AAABAAEAEBACAAEAAQCwAAAAFgAAACgAAAAQAAAAIAAAAAEAAQAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA></head>
<body>
<div id=main>
<a href=https://www.hanshq.net/><img src=data:image/jpeg;base64,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 id=header alt=hanshq.net></a>
<div id=container>
<div id=center>
<h1>Building an Android App <br>from the Command Line<br><span class=date>(3 January 2017)</span></h1>
<div id=left>
<p>I have been learning a bit of Android programming recently (late to the party, I know). One thing that frustrated me was figuring out how to actually build an Android program.</p>
<p>Things are simple enough with C. As explained in the first section of <a href=https://en.wikipedia.org/wiki/The_C_Programming_Language>K&R</a>, one might write this as a first program:</p>
<div class=highlight><pre><span class=cp>#include <stdio.h></span>
<span class=kt>int</span> <span class=nf>main</span><span class=p>()
{</span>
<span class=n>printf</span><span class=p>(</span><span class=s>"Hello, world!</span><span class=se>\n</span><span class=s>"</span><span class=p>);</span>
<span class=k>return</span> <span class=mi>0</span><span class=p>;
}</span>
</pre></div>
<p>and turn it into an executable by simply invoking the system compiler as below.</p>
<div class=highlight><pre><span class=gp>$</span> cc hello.c
<span class=gp>$</span> ./a.out
<span class=go>Hello, world!</span>
</pre></div>
<p>This diagram illustrates the full process:</p>
<div style=text-align:center>
<div class=latex><p style=margin-left:2em><img src="data:image/png;base64,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" alt=LaTeX></p></div>
</div>
<p>For Android, however, the <a href=https://developer.android.com/training/basics/firstapp/creating-project.html>official way</a> to write Hello World is to fire up <a href=https://developer.android.com/studio/intro/index.html>Android Studio</a>, use its wizard to create a new project, and the application will then be generated and built automagically in a few minutes.</p>
<p>This is of course intended as a convenience for the developer, but for someone who wants to know what's going on, it makes things difficult instead. What actually happened? Which of all these files are really necessary for Hello World?</p>
<p>Others have expressed similar concerns:</p>
<div style=text-align:center>
<p><a href=https://twitter.com/ID_AA_Carmack/status/771749108780523520><img src=data:image/png;base64,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 alt="John Carmack: Create and run an empty activity in Android Studio and I get a 38 MB folder with 1,175 files. We've just given up on elegance."></a></p>
</div>
<p>(For me, it generated a 50 MB directory containing <a href=https://www.hanshq.net/files/android_files.txt>1,348</a> files spread across 630 subdirectories.)</p>
<p>Perhaps it is the control freak in me speaking (a good trait for programmers about their programs), but I simply don't feel comfortable not understanding how to build my own program.</p>
<p>Below are my notes on how to build an Android application by hand from the command line. The instructions are for Linux, but they should be easy to adapt to Mac or Windows. The full source code and a build script is available in <a href=https://www.hanshq.net/files/command_line_android.tar.gz><span class=code>command_line_android.tar.gz</span></a>.</p>
<a name=toc></a>
<h2>Table of Contents</h2>
<ul>
<li><a href=#sdk>Installing the Development Tools</a></li>
<li><a href=#source>The Hello World Program</a></li>
<li><a href=#building>Building</a></li>
<li><a href=#running>Running</a></li>
<li><a href=#native>Using Native Code</a></li>
</ul>
<a name=sdk></a>
<h2>Installing the Development Tools</h2>
<p>Android applications are usually written in Java, so building them requires having a Java Development Kit (JDK) installed. The current version of the Android tools require Java 8, which I downloaded from <a href=http://www.oracle.com/technetwork/java/javase/downloads/index.html>here</a>, extracted and put on my <span class=code>PATH</span> like so:</p>
<div class=highlight><pre><span class=gp>$</span> tar zxf jdk-8u112-linux-x64.tar.gz
<span class=gp>$</span> <span class=nb>export </span><span class=nv>JAVA_HOME</span><span class=o>=</span><span class=si>${</span><span class=nv>HOME</span><span class=si>}</span>/jdk1.8.0_112
<span class=gp>$</span> <span class=nb>export </span><span class=nv>PATH</span><span class=o>=</span><span class=si>${</span><span class=nv>JAVA_HOME</span><span class=si>}</span>/bin:<span class=nv>$PATH</span>
</pre></div>
<p>Android specific tools are provided in the Android Software Development Kit (SDK). Normally, this is installed when installing Android Studio, but we can also do it ourselves (see the "Get just the command line tools" section on <a href=https://developer.android.com/studio/index.html#downloads>the Android Studio download page</a>):</p>
<div class=highlight><pre><span class=gp>$</span> curl -O https://dl.google.com/android/android-sdk_r24.4.1-linux.tgz
<span class=gp>$</span> tar zxf android-sdk_r24.4.1-linux.tgz
</pre></div>
<p>Unfortunately, that file doesn't contain everything we need, as explained in <span class=code>SDK Readme.txt</span>:</p>
<div class=highlight><pre>The Android SDK archive initially contains only the basic SDK tools. It does
not contain an Android platform or any third-party libraries. In fact, it
doesn't even have all the tools you need to develop an application.
In order to start developing applications, you must install the Platform-tools
and at least one version of the Android platform, using the SDK Manager.
</pre></div>
<p>What we need is <span class=code>build-tools</span> (for <span class=code>aapt</span>, <span class=code>dx</span> and <span class=code>apksigner</span>), an Android Platform to target (I will use version 16) and <span class=code>platform-tools</span> (for <span class=code>adb</span>).</p>
<p>Instead of using the SDK Manager as suggested above, we can install those directly ourselves (the filenames were found in <a href=https://dl.google.com/android/repository/repository-11.xml>repository-11.xml</a>):</p>
<div class=highlight><pre><span class=gp>$</span> curl -O https://dl.google.com/android/repository/build-tools_r25-linux.zip
<span class=gp>$</span> unzip build-tools_r25-linux.zip
<span class=gp>$</span> mkdir android-sdk-linux/build-tools
<span class=gp>$</span> mv android-7.1.1 android-sdk-linux/build-tools/25.0.0
<span class=gp>$</span> curl -O https://dl.google.com/android/repository/android-16_r05.zip
<span class=gp>$</span> unzip android-16_r05.zip
<span class=gp>$</span> mv android-4.1.2 android-sdk-linux/platforms/android-16
<span class=gp>$</span> curl -O https://dl.google.com/android/repository/platform-tools_r25-linux.zip
<span class=gp>$</span> unzip platform-tools_r25-linux.zip -d android-sdk-linux/
</pre></div>
<a name=source></a>
<h2>The Hello World Program</h2>
<p>Our Hello World program consists of three files: an application manifest, a layout and an Activity.</p>
<p>The <a href=https://developer.android.com/guide/topics/manifest/manifest-intro.html>app manifest</a> is shown below (<span class=code>AndroidManifest.xml</span>). It specifies the name of the app, which Android API it targets, etc. The <span class=code>intent-filter</span> element sets up <span class=code>MainActivity</span> as the main entry point of the program.</p>
<div class=highlight><pre><span class=cp><?xml version="1.0" encoding="utf-8"?></span>
<span class=nt><manifest</span> <span class=na>xmlns:android=</span><span class=s>"http://schemas.android.com/apk/res/android"</span>
<span class=na>package=</span><span class=s>"net.hanshq.hello"</span>
<span class=na>versionCode=</span><span class=s>"1"</span>
<span class=na>versionName=</span><span class=s>"0.1"</span><span class=nt>>
<uses-sdk</span> <span class=na>android:minSdkVersion=</span><span class=s>"16"</span><span class=nt>/>
<application</span> <span class=na>android:label=</span><span class=s>"Hello"</span><span class=nt>>
<activity</span> <span class=na>android:name=</span><span class=s>".MainActivity"</span><span class=nt>>
<intent-filter>
<action</span> <span class=na>android:name=</span><span class=s>"android.intent.action.MAIN"</span><span class=nt>/>
<category</span> <span class=na>android:name=</span><span class=s>"android.intent.category.LAUNCHER"</span><span class=nt>/>
</intent-filter>
</activity>
</application>
</manifest></span>
</pre></div>
<p>Below is the <a href=https://developer.android.com/guide/topics/ui/declaring-layout.html>layout</a> file (<span class=code>res/layout/activity_main.xml</span>). It defines UI elements to be used in our program.</p>
<div class=highlight><pre><span class=cp><?xml version="1.0" encoding="utf-8"?></span>
<span class=nt><LinearLayout</span>
<span class=na>xmlns:android=</span><span class=s>"http://schemas.android.com/apk/res/android"</span>
<span class=na>android:layout_width=</span><span class=s>"match_parent"</span>
<span class=na>android:layout_height=</span><span class=s>"match_parent"</span>
<span class=na>android:gravity=</span><span class=s>"center"</span>
<span class=na>android:orientation=</span><span class=s>"vertical"</span><span class=nt>>
<TextView</span>
<span class=na>android:layout_width=</span><span class=s>"wrap_content"</span>
<span class=na>android:layout_height=</span><span class=s>"wrap_content"</span>
<span class=na>android:id=</span><span class=s>"@+id/my_text"</span><span class=nt>/>
</LinearLayout></span>
</pre></div>
<p>Finally, the <a href=https://developer.android.com/reference/android/app/Activity.html>Activity</a> is implemented like this: (<span class=code>java/net/hanshq/hello/MainActivity.java</span>)</p>
<div class=highlight><pre><span class=kn>package</span> <span class=nn>net.hanshq.hello</span><span class=o>;</span>
<span class=kn>import</span> <span class=nn>android.app.Activity</span><span class=o>;</span>
<span class=kn>import</span> <span class=nn>android.os.Bundle</span><span class=o>;</span>
<span class=kn>import</span> <span class=nn>android.widget.TextView</span><span class=o>;</span>
<span class=kd>public class</span> <span class=nc>MainActivity</span> <span class=kd>extends</span> <span class=n>Activity</span> <span class=o>{</span>
<span class=nd>@Override</span>
<span class=kd>protected</span> <span class=kt>void</span> <span class=nf>onCreate</span><span class=o>(</span><span class=n>Bundle savedInstanceState</span><span class=o>) {</span>
<span class=kd>super</span><span class=o>.</span><span class=na>onCreate</span><span class=o>(</span><span class=n>savedInstanceState</span><span class=o>);</span>
<span class=n>setContentView</span><span class=o>(</span><span class=n>R</span><span class=o>.</span><span class=na>layout</span><span class=o>.</span><span class=na>activity_main</span><span class=o>);</span>
<span class=n>TextView text</span> <span class=o>= (</span><span class=n>TextView</span><span class=o>)</span><span class=n>findViewById</span><span class=o>(</span><span class=n>R</span><span class=o>.</span><span class=na>id</span><span class=o>.</span><span class=na>my_text</span><span class=o>);</span>
<span class=n>text</span><span class=o>.</span><span class=na>setText</span><span class=o>(</span><span class=s>"Hello, world!"</span><span class=o>);
}
}</span>
</pre></div>
<a name=building></a>
<h2>Building</h2>
<p>We will use shell variables to more conveniently refer to the SDK we installed before. All build artifacts will be put in subdirectories of the <span class=code>build</span> directory which we create here.</p>
<div class=highlight><pre><span class=gp>$</span> <span class=nv>SDK</span><span class=o>=</span><span class=s2>"</span><span class=si>${</span><span class=nv>HOME</span><span class=si>}</span><span class=s2>/android-sdk-linux"</span>
<span class=gp>$</span> <span class=nv>BUILD_TOOLS</span><span class=o>=</span><span class=s2>"</span><span class=si>${</span><span class=nv>SDK</span><span class=si>}</span><span class=s2>/build-tools/25.0.0"</span>
<span class=gp>$</span> <span class=nv>PLATFORM</span><span class=o>=</span><span class=s2>"</span><span class=si>${</span><span class=nv>SDK</span><span class=si>}</span><span class=s2>/platforms/android-16"</span>
<span class=gp>$</span> mkdir -p build/gen build/obj build/apk
</pre></div>
<p>The first build step is to generate the <span class=code>R.java</span> file, which is used for referring to resources (such as <span class=code>R.id.my_text</span> above). This is done using the Android Asset Packaging Tool, <span class=code>aapt</span>:</p>
<div class=highlight><pre><span class=gp>$</span> <span class=s2>"</span><span class=si>${</span><span class=nv>BUILD_TOOLS</span><span class=si>}</span><span class=s2>/aapt"</span> package -f -m -J build/gen/ -S res <span class=se>\</span>
<span class=go> -M AndroidManifest.xml -I "${PLATFORM}/android.jar"</span>
</pre></div>
<p>which creates <span class=code>build/gen/net/hanshq/hello/R.java</span>.</p>
<p>The <span class=code>-f</span> flag causes <span class=code>aapt</span> to overwrite any existing output file, <span class=code>-m</span> causes it to create package directories under the output directory, and <span class=code>-J</span> makes it generate the <span class=code>R.java</span> file and sets the output directory. <span class=code>-S</span> points out the resource directory, <span class=code>-M</span> specifies the manifest, and <span class=code>-I</span> adds the platform <span class=code>.jar</span> as an "include file".</p>
<p>Now that all the Java code is ready, we can compile it using <span class=code>javac</span>:</p>
<div class=highlight><pre><span class=gp>$</span> javac -source 1.7 -target 1.7 -bootclasspath <span class=s2>"</span><span class=si>${</span><span class=nv>JAVA_HOME</span><span class=si>}</span><span class=s2>/jre/lib/rt.jar"</span> <span class=se>\</span>
<span class=go> -classpath "${PLATFORM}/android.jar" -d build/obj \
build/gen/net/hanshq/hello/R.java java/net/hanshq/hello/MainActivity.java</span>
</pre></div>
<p>(The <span class=code>1.7</span> and <span class=code>-bootclasspath</span> ure used to emit Java 7 byte code, which the Android tools expect, despite using JDK version 8.)</p>
<p>The Java compiler created <span class=code>.class</span> files containing byte code for the Java Virtual Machine. That then has to be translated to <a href=https://en.wikipedia.org/wiki/Dalvik_%28software%29>Dalvik</a> byte code using the <span class=code>dx</span> tool:</p>
<div class=highlight><pre><span class=gp>$</span> <span class=s2>"</span><span class=si>${</span><span class=nv>BUILD_TOOLS</span><span class=si>}</span><span class=s2>/dx"</span> --dex --output<span class=o>=</span>build/apk/classes.dex build/obj/
</pre></div>
<p>(There is a new set of Android tools, <a href=https://source.android.com/source/jack.html>Jack and Jill</a>, that compile Java code directly into Dalvik bytecode. Maybe that will become the way to do things in the future.)</p>
<p>We then package the contents of the <span class=code>build/apk/</span> directory together with the manifest and resources into an Android Application Package (APK) file, again using the <span class=code>aapt</span> tool:</p>
<div class=highlight><pre><span class=gp>$</span> <span class=s2>"</span><span class=si>${</span><span class=nv>BUILD_TOOLS</span><span class=si>}</span><span class=s2>/aapt"</span> package -f -M AndroidManifest.xml -S res/ <span class=se>\</span>
<span class=go> -I "${PLATFORM}/android.jar" \
-F build/Hello.unsigned.apk build/apk/</span>
</pre></div>
<p>The application has now been built, but the APK file needs to be <a href=https://developer.android.com/studio/publish/app-signing.html#signing-manually>signed</a> before any device will allow running it, even in debug mode, and zipaligned if we ever want to publish it in the Play Store.</p>
<p>First, we run the <span class=code>zipalign</span> tool, which aligns uncompressed files in the APK on 4-byte boundaries for easier memory mapping:</p>
<div class=highlight><pre><span class=gp>$</span> <span class=s2>"</span><span class=si>${</span><span class=nv>BUILD_TOOLS</span><span class=si>}</span><span class=s2>/zipalign"</span> -f -p <span class=m>4</span> <span class=se>\</span>
<span class=go> build/Hello.unsigned.apk build/Hello.aligned.apk</span>
</pre></div>
<p>Then we use the Java <a href=https://docs.oracle.com/javase/8/docs/technotes/tools/unix/keytool.html><span class=code>keytool</span></a> to create a key store and key for signing:</p>
<div class=highlight><pre><span class=gp>$</span> keytool -genkeypair -keystore keystore.jks -alias androidkey <span class=se>\</span>
<span class=go> -validity 10000 -keyalg RSA -keysize 2048 \
-storepass android -keypass android
What is your first and last name?
[Unknown]:
What is the name of your organizational unit?
[Unknown]:
What is the name of your organization?
[Unknown]:
What is the name of your City or Locality?
[Unknown]:
What is the name of your State or Province?
[Unknown]:
What is the two-letter country code for this unit?
[Unknown]:
Is CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown correct?
[no]: yes</span>
</pre></div>
<p>(you may want to put in more proper values of course.)</p>
<p>and use that key to sign our application with <span class=code>apksigner</span>:</p>
<div class=highlight><pre><span class=gp>$</span> <span class=s2>"</span><span class=si>${</span><span class=nv>BUILD_TOOLS</span><span class=si>}</span><span class=s2>/apksigner"</span> sign --ks keystore.jks <span class=se>\</span>
<span class=go> --ks-key-alias androidkey --ks-pass pass:android \
--key-pass pass:android --out build/Hello.apk \
build/Hello.aligned.apk</span>
</pre></div>
<p>Et voilà, we have successfully built an Android application by hand from the command line! The diagram below illustrates the whole process.</p>
<div style=text-align:center>
<div class=latex><p style=margin-left:2em><img src=data:image/png;base64,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 alt=LaTeX></p></div>
</div>
<p>(We skipped some common steps that aren't strictly necessary: <a href=https://developer.android.com/studio/write/lint.html>linting</a> and <a href=https://developer.android.com/studio/build/shrink-code.html>ProGuard</a>.)</p>
<a name=running></a>
<h2>Running</h2>
<p>We can install our freshly built APK on a device (which must have <a href=https://developer.android.com/studio/command-line/adb.html#Enabling>USB debugging</a> enabled) using the Android Debug Bridge:</p>
<div class=highlight><pre><span class=gp>$</span> <span class=s2>"</span><span class=si>${</span><span class=nv>SDK</span><span class=si>}</span><span class=s2>/platform-tools/adb"</span> install -r build/Hello.apk
</pre></div>
<p>and run it, either by starting it manually from the Launcher, or with <span class=code>adb</span>:</p>
<div class=highlight><pre><span class=gp>$</span> <span class=s2>"</span><span class=si>${</span><span class=nv>SDK</span><span class=si>}</span><span class=s2>/platform-tools/adb"</span> shell am start -n net.hanshq.hello/.MainActivity
</pre></div>
<a name=native></a>
<h2>Using Native Code</h2>
<p>While Android applications are usually written in Java, they can also contain native code, that is, machine code to be run directly by the device's processor. This is useful for performance, as it removes the overhead from running Java code, and for portability, as it opens the platform to code written in other languages.</p>
<p>Adding native code to our program makes it a little harder to build, but it turns out not to be too bad.</p>
<p>The <a href=https://developer.android.com/ndk/index.html>Android Native Development Kit</a> (NDK) provides compilers and libraries for building C and C++ code for Android. It can be installed like this:</p>
<div class=highlight><pre><span class=gp>$</span> curl -O https://dl.google.com/android/repository/android-ndk-r13b-linux-x86_64.zip
<span class=gp>$</span> unzip android-ndk-r13b-linux-x86_64.zip
<span class=gp>$</span> <span class=nv>NDK</span><span class=o>=</span><span class=s2>"</span><span class=si>${</span><span class=nv>HOME</span><span class=si>}</span><span class=s2>/android-ndk-r13b"</span>
</pre></div>
<p>We set more shell variables to point at the specific toolchains we'll use: (if you're not using Linux, you'll want one of the other <span class=code>prebuilt</span> directories)</p>
<div class=highlight><pre><span class=gp>$</span> <span class=nv>ARM_TOOLCHAIN</span><span class=o>=</span><span class=s2>"</span><span class=si>${</span><span class=nv>NDK</span><span class=si>}</span><span class=s2>/toolchains/arm-linux-androideabi-4.9/prebuilt/"</span>
<span class=gp>$</span> ARM_TOOLCHAIN+<span class=o>=</span><span class=s2>"linux-x86_64/bin/arm-linux-androideabi-gcc"</span>
<span class=gp>$</span> <span class=nv>X86_TOOLCHAIN</span><span class=o>=</span><span class=s2>"</span><span class=si>${</span><span class=nv>NDK</span><span class=si>}</span><span class=s2>/toolchains/x86-4.9/prebuilt/"</span>
<span class=gp>$</span> X86_TOOLCHAIN+<span class=o>=</span><span class=s2>"linux-x86_64/bin/i686-linux-android-gcc"</span>
</pre></div>
<p>We will update our Activity to use the <a href=http://docs.oracle.com/javase/8/docs/technotes/guides/jni/>Java Native Interface</a> (see also <a href=https://developer.android.com/training/articles/perf-jni.html>Android JNI Tips</a>) for a new method, <span class=code>getMessage()</span>, and use that method to set the text of the <span class=code>TextView</span>. The native method will be implemented by a library called <span class=code>hello</span>, which we load with <span class=code>System.loadLibrary</span> in a static initializer block:</p>
<div class=highlight><pre><span class=kn>package</span> <span class=nn>net.hanshq.hello</span><span class=o>;</span>
<span class=kn>import</span> <span class=nn>android.app.Activity</span><span class=o>;</span>
<span class=kn>import</span> <span class=nn>android.os.Bundle</span><span class=o>;</span>
<span class=kn>import</span> <span class=nn>android.widget.TextView</span><span class=o>;</span>
<span class=kd>public class</span> <span class=nc>MainActivity</span> <span class=kd>extends</span> <span class=n>Activity</span> <span class=o>{</span>
<span class=kd>static</span> <span class=o>{</span>
<span class=n>System</span><span class=o>.</span><span class=na>loadLibrary</span><span class=o>(</span><span class=s>"hello"</span><span class=o>);
}</span>
<span class=kd>public native</span> <span class=n>String</span> <span class=nf>getMessage</span><span class=o>();</span>
<span class=nd>@Override</span>
<span class=kd>protected</span> <span class=kt>void</span> <span class=nf>onCreate</span><span class=o>(</span><span class=n>Bundle savedInstanceState</span><span class=o>) {</span>
<span class=kd>super</span><span class=o>.</span><span class=na>onCreate</span><span class=o>(</span><span class=n>savedInstanceState</span><span class=o>);</span>
<span class=n>setContentView</span><span class=o>(</span><span class=n>R</span><span class=o>.</span><span class=na>layout</span><span class=o>.</span><span class=na>activity_main</span><span class=o>);</span>
<span class=n>TextView text</span> <span class=o>= (</span><span class=n>TextView</span><span class=o>)</span><span class=n>findViewById</span><span class=o>(</span><span class=n>R</span><span class=o>.</span><span class=na>id</span><span class=o>.</span><span class=na>my_text</span><span class=o>);</span>
<span class=n>text</span><span class=o>.</span><span class=na>setText</span><span class=o>(</span><span class=n>getMessage</span><span class=o>());
}
}</span>
</pre></div>
<p>The <span class=code>hello</span> library must provide a native implementation of the <span class=code>getMessage</span> method. To figure out what C function signature corresponds to the Java method, we use the <a href=https://docs.oracle.com/javase/8/docs/technotes/tools/unix/javah.html><span class=code>javah</span></a> tool:</p>
<div class=highlight><pre><span class=gp>$</span> javah -classpath <span class=s2>"</span><span class=si>${</span><span class=nv>PLATFORM</span><span class=si>}</span><span class=s2>/android.jar:build/obj"</span> <span class=se>\</span>
<span class=go> -o /tmp/jni.h net.hanshq.hello.MainActivity</span>
<span class=gp>$</span> grep -A1 _getMessage /tmp/jni.h
<span class=go>JNIEXPORT jstring JNICALL Java_net_hanshq_hello_MainActivity_getMessage
(JNIEnv *, jobject);</span>
</pre></div>
<p>We implement it like this, in <span class=code>hello.c</span>:</p>
<div class=highlight><pre><span class=cp>#include <stdlib.h>
#include <jni.h></span>
<span class=k>static const</span> <span class=kt>char</span> <span class=o>*</span><span class=k>const</span> <span class=n>messages</span><span class=p>[]</span> <span class=o>=</span> <span class=p>{</span>
<span class=s>"Hello, world!"</span><span class=p>,</span>
<span class=s>"Hej världen!"</span><span class=p>,</span>
<span class=s>"Bonjour, monde!"</span><span class=p>,</span>
<span class=s>"Hallo Welt!"</span>
<span class=p>};</span>
<span class=n>JNIEXPORT jstring JNICALL</span>
<span class=nf>Java_net_hanshq_hello_MainActivity_getMessage</span><span class=p>(</span><span class=n>JNIEnv</span> <span class=o>*</span><span class=n>env</span><span class=p>,</span> <span class=n>jobject obj</span><span class=p>)
{</span>
<span class=kt>int</span> <span class=n>i</span><span class=p>;</span>
<span class=n>i</span> <span class=o>=</span> <span class=n>rand</span><span class=p>()</span> <span class=o>%</span> <span class=p>(</span><span class=k>sizeof</span><span class=p>(</span><span class=n>messages</span><span class=p>)</span> <span class=o>/</span> <span class=k>sizeof</span><span class=p>(</span><span class=n>messages</span><span class=p>[</span><span class=mi>0</span><span class=p>]));</span>
<span class=k>return</span> <span class=p>(</span><span class=o>*</span><span class=n>env</span><span class=p>)</span><span class=o>-></span><span class=n>NewStringUTF</span><span class=p>(</span><span class=n>env</span><span class=p>,</span> <span class=n>messages</span><span class=p>[</span><span class=n>i</span><span class=p>]);
}</span>
</pre></div>
<p>The C file is compiled into the shared library <span class=code>libhello.so</span> (note the extra <span class=code>lib</span> prefix). We build one for ARMv7 and one for X86, to support most devices and emulators, and put them under the APK's <span class=code>lib/</span> directory:</p>
<div class=highlight><pre><span class=gp>$</span> mkdir -p build/apk/lib/armeabi-v7a build/apk/lib/x86
<span class=gp>$</span> <span class=s2>"</span><span class=si>${</span><span class=nv>ARM_TOOLCHAIN</span><span class=si>}</span><span class=s2>"</span> --sysroot<span class=o>=</span><span class=s2>"</span><span class=si>${</span><span class=nv>NDK</span><span class=si>}</span><span class=s2>/platforms/android-16/arch-arm"</span> <span class=se>\</span>
<span class=go> -march=armv7-a -mfpu=vfpv3-d16 -mfloat-abi=softfp -Wl,--fix-cortex-a8 \
-fPIC -shared -o build/apk/lib/armeabi-v7a/libhello.so jni/hello.c</span>
<span class=gp>$</span> <span class=s2>"</span><span class=si>${</span><span class=nv>X86_TOOLCHAIN</span><span class=si>}</span><span class=s2>"</span> --sysroot<span class=o>=</span><span class=s2>"</span><span class=si>${</span><span class=nv>NDK</span><span class=si>}</span><span class=s2>/platforms/android-16/arch-x86"</span> <span class=se>\</span>
<span class=go> -fPIC -shared -o build/apk/lib/x86/libhello.so jni/hello.c</span>
</pre></div>
<p>(See the <a href=https://developer.android.com/ndk/guides/abis.html>ABI Management</a> doc for which ABIs can be targeted with the NDK, and under which <span class=code>lib/</span> directory to put the <span class=code>.so</span> file. The ARM compiler flags were inspired by <span class=code>${NDK}/build/core/toolchains/arm-linux-androideabi-4.9/setup.mk</span>.)</p>
<p>To build the APK, we repeat the build steps from above (<span class=code>aapt</span> all the way to <span class=code>apksigner</span>). The contents of the APK can be inspected with the <span class=code>jar</span> tool:</p>
<div class=highlight><pre><span class=gp>$</span> jar tf build/Hello.apk
<span class=go>AndroidManifest.xml
classes.dex
lib/armeabi-v7a/libhello.so
lib/x86/libhello.so
res/layout/activity_main.xml
resources.arsc
META-INF/ANDROIDK.SF
META-INF/ANDROIDK.RSA
META-INF/MANIFEST.MF</span>
</pre></div>
<p>The file should contain the manifest, the Java classes converted to DEX format, our two native <span class=code>.so</span> files, Application resources in raw (<span class=code>activity_main.xml</span>) and binary (<span class=code>resources.arsc</span>) form. The <span class=code>META-INF</span> directory contains the JAR file manifest and cryptographic signatures.</p>
<p>When run, the application looks like this:</p>
<div style=text-align:center>
<p><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAhwAAAEwCAYAAAD8eKisAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAWIklEQVR42u3de5RVdcH/8c+5zIWRm0rKrSc0L6SReMdMwSyTylVoKWpqaWaZS83ULlL9lpUrTbNlllYmZYWaYiplgabiXZeakoAmpORtqQwDglxm5pz9++NZTk0Czpj2AL1ea7Fgztn7e/baZ/S8z/fsvU8pSREAgDdR2S4AAAQHALDeq/Z2hYMPPjgbb7xxt9suu+yyrFixwt4EYL1RqVQyYMCALFq0KEOHDs3ChQvT3t6++nfn5XLq9foax2psbMy2226ber2eUqmURx55xA7+d4LjO9/5TrbeeusMHjw4c+fOzdZbb51KpZKWlpacf/759iYA640rrrgic+fOzZw5czJhwoTsscce2X333fPcc891W66pqSk77bRT7r777tWO8853vjNNTU0ZNGhQiuJ/D4tsaGhIW1tbnnzySTu6t8HxpS99KUcddVT23XfffOQjH8nZZ5+dE044Ic3NzRkwYIA9CcB6Y+DAgXniiSeyYsWKjBs3LoccckhGjhyZl156qdtyDQ0Nefe7353Ozs7VjlMqlTJo0KA0NDSkvb099Xo95XI5gwYNSq1We83t2HXXXfM///M/mTp1arfbK5VKDj300FQqla7bfvGLXyRJdtlll+y///558MEHc8MNN6w3+7xHx3CcccYZOemkk1IURZqbm9PQ0JCWlpY0NDSkoaHBby4A65XLL788S5cuzXbbbZeOjo5UKpVMmTIlW2211T9eIMvl7L333qlWqymVSmsdr1Kp5P7778/MmTOzePHiHm1DqVTK9ddfn9NPP/1V9zU1NeXb3/52Jk6cmAkTJmTChAlJkgkTJmTGjBlpb2/PRRddlG9961sb1gzHQQcd1DVN9Pvf/z5FUeT4449PURQpiiI/+tGP/PYCsN445phjsu2222bQoEF5+OGH85Of/CTNzc1dIVAulzN27NiUyz07t6Ioirz88svp06dPNt100x6tc9111+XJJ5/seuNeLpczefLkHHXUUWlqakpDQ0M+/vGPZ9myZV3b9dWvfjXf/OY3c/755+fqq6/O3XffnbPOOivLly/fMGY4XomNJKnX6ymKIrVarevfALA+efbZZ3PPPffk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ggXrzPY4hgMAEBwAgOAAABAcAIDgAAAEBwCA4AAABAcAgOAAAAQHACA4AAAEBwAgOAAAwQEAIDgAAMEBACA4AADBAQAIDgAAwQEACA4AQHAAAAgOAEBwAAAIDgBAcAAAggMAQHAAAIIDABAcAACCAwAQHAAAggMAEBwAgOAAABAcAIDgAAAEBwCA4AAABAcAgOAAAAQHACA4AAAEBwAgOAAAwQEAIDgAAMEBACA4AADBAQAIDgAAwQEACA4AQHAAAAgOAEBwAAAIDgBAcAAAggMAQHAAAIIDABAcAACCAwAQHAAAggMAEBwAgOAAABAcAIDgAAAEBwCA4AAA/lORUC6noaFBcAAAb7wtt9wyU6dOzezZs/PYY4/lgQceyKRJk1KpVAQHAPDvaWxszG9/+9vce++9GTduXF588cXMnj07zc3NOe200/L444/nyCOPfF1jV+1eACBJbrzxxowcOTLnnntuLr744ixZsqTrvh133DHnnXdeLrjggvTr1y8//OEPezV2afTo0YVdDAAblra2tixYsKDHy//4xz/Oxz72sZx88sn55S9/ucblbrjhhuywww4ZNWpUFi1a1OPxfaQCAP/lKpVKxo8fn8svv3ytsZEkRxxxRJqbm3PNNdf06jEEBwD8lzvwwAMzcODAXHbZZa+5bGtra6688spsueWWaWlpERwAQM/stddeqdfrmTNnTo+WnzlzZkqlUvr06SM4AIA3T1H07hBQwQEA/+XuuOOOlMvlbLfddj1afq+99kqSrFy5UnAAAD0zderULF68OJ/4xCdec9mNN944hx56aJ588sm8/PLLggMA6JlarZbp06fnsMMOy6GHHrrWZS+77LKsXLkyBx54YK8eQ3AAADn22GMzd+7cfP/738+pp56avn37drt/1KhRuemmm7LXXnvlnHPOycKFC3s1vgt/AcAGqLcX/kqSpqam/OY3v8m73/3ulEqlPPTQQ1myZEm22mqrbLHFFlm4cGG++c1vZvLkyb3eHsEBAIKjm6222irnn39+tt1221Sr1SxdujTXXnttzjzzzNRqtdc1puAAAMGxWtVqNeVyOR0dHb0+DfZVY3lKAIDV6ezsfMPGctAoAPCmExwAgOAAAAQHAIDgAAAEBwAgOAAABAcAIDgAAAQHACA4AADBAQAgOAAAwQF0097e3u0roIuiSEdHx1rX2XzzzZMkG220Ufr27dvjx/nnx/jnn+v1+hofsyiKbLbZZimVSmsdE0BwwDqqKIp86UtfysCBA7tu69u3b04++eQ1vphXKpWceeaZSZK99947H/jAB17zcarVar72ta+lpaUlSTJw4MBMmjQp5fL//u9g5MiROe6441a7bkdHRyZNmpRqtZpyuZxBgwYlSVatWpUzzzwz9XrdEwkIDljXg2Pw4MGpVCrdgmLzzTfvNuvxr7MLr8RIvV5PrVbrdt/qZiI6OjrSv3//bLLJJimKIsOHD8/QoUPT0tKSWq2WHXbYIfPnz1/tGKVSqWsWpqWlJd/4xje6Hnvw4MHdthOg25sduwDWD/369cuXv/zlNDY2prW1NWeddVa3OPlnI0eOzNFHH51yuZz58+fnoosu6nb/7bffnm222Sbz5s3L2LFj87vf/S5bbrll7rvvvmy//fa59tpr09HRkdNOOy3Dhw/P0qVLc+aZZ3YFxaabbpqvfvWrqdfrOeecc3Lsscea3QDMcMD6oqOjIx/96Edz+OGH5/DDD8+BBx6Yzs7OdHZ25gMf+EAuuOCCHHfccXn66aczfvz41Y7R2dmZz33ucznrrLNy4oknplarZdddd+0KglKplDvvvDM777xzyuVyRowYkVtvvTXjxo1LuVxO3759s2zZshx99NGZNWtWPvvZz+b666/PCSec0BUcra2tOe2001Iul3PSSSelT58+r5pdATDDAeuoSqWSWbNmZenSpUmSPn36ZMSIEalWq7nmmmsyfvz4vO9978uwYcOycuXKV61fFEWGDBmSv/3tb3nhhRfS2NiYKVOm5POf/3zuuuuuruM0Fi9enGHDhmW77bbLc889l1qtli222CLvete78swzz6SxsTE77bRTKpVKPv3pT6e5uTnbbLNNtxmVxsbGrr9XrVolOADBAeuLcrmcv/3tb1m0aFGSpH///imXy2lvb8/ZZ5+dn/3sZ/nrX/+aD3/4wxkwYMBqx6jVamloaPjHf+TVajo7O1/1OIsWLcr48eMzc+bMFEWRp59+Ovvvv3/++te/plwupyiK3HLLLV3bcvXVV6/xGI1XPrpZ3TEjAImPVGC9UBRFNt544yxdujTlcjm77bbbapcrlUpZuHBhNt9884wYMSKdnZ35/Oc/n2nTpqVarXZbbt68eXnHO96Re+65J0kyffr0bL/99vnLX/6Ser2eu+++O+PGjcsLL7yQcrmcD33oQ92O03glPur1ehoaGnL99dd3zaAA/KvK4MGD/5/dAOuGIUOGZPbs2V1nnlQqlWyyySaZPXt2Zs2alU9+8pPZbbfdcv/996coisybNy9Dhw7Ngw8+mH79+mX58uV59tln8+CDD2bChAl53/vel9tuuy0PPfTQq2Yf2trasmrVqsyZMyflcjnPPfdchg0blhkzZqRSqWT27NkZPHhwJk6cmLe//e257rrrsnLlygwbNiyzZs1Ke3t7+vfvnwMOOCDTp0/Psccem3vuuccsB6wjVq5cmSVLlqwz21MaPXq089hgHdHR0ZFqtdrtRbuzs7NrduKVEKlWq6nX66lWq+no6EhDQ0Pq9XqKoug6zqKjo6Nr9mF1Mw9FUaRWq3Wb+XhlrFfUarV0dnamXC533f7Py3R2dqZWq6W5uTnt7e3d1gX+b7W1tWXBggXrzPY4hgPWIat7wf7nIHjlQM0kXRHxyjr/GhWv9eJfKpW6jb26dSqVyqtOvf3X40Oq1WqKohAbwFr5wBUAEBwAgOAAABAcAIDgAAAEBwCA4AAABAcAgOAAAAQHACA4AAAEBwAgOAAAwQEAIDgAAMEBACA4AADBAQAIDgAAwQEACA4AQHAAAAgOAEBwAAAIDgBAcAAAggMAQHAAAIIDABAcAACCAwAQHAAAggMAEBwAgOAAABAcAIDgAAAEBwCA4AAABAcAgOAAAAQHACA4AAAEBwAgOAAAwQEAsDp9+vTJsGHDBAcA8Ob42te+ljlz5uT+++9Pudy7hBAcAMBa7bPPPrnrrrty+umn59FHH01zc3MqlUqvxqjajQDA6my66aY599xzM2HChMybNy/vec970tDQkFtvvbXXY5nhAAC6qVarOe644zJ79uzsu++++frXv55ddtklDz/8cBobG1MURe/HtFsBgFfssMMO+fWvf50hQ4Zk6tSpOeWUU7Js2bJ/e1wzHABA+vXrl1/+8pe5/fbbs2TJkhxwwAH5zGc+84bERmKGAwBIcvHFF2e//fbLr371qxx//PFv+PhmOACAXHLJJVm2bFkOPvjgfOUrX0lLS4vgAADeWLfccku22WabXHzxxTn55JPz6KOPZsKECYIDAHhjdXR0ZNKkSdlzzz3z4IMP5he/+EVuueWW7LLLLoIDAHhjzZs3Lx/96EczceLE9O/fPzfddFN+9KMfZdNNN01nZ2dKpZLgAADeGDfccEN23nnnnHfeedlvv/0yf/78HH744anVar0eqzR69OjCLgWADUtbW1sWLFjwho1XrVZz5ZVXZo899kilUsnQoUN7FR5OiwUAXlNnZ2cOOuigbLvtthk8eHCvZzkEBwDQY4899lgee+yxXq/nGA4A4E0nOAAAwQEACA4AAMEBAAgOAEBwAAAIDgBAcAAACA4AQHAAAIIDAEBwAACCAwAQHAAAggMAEBwAAIIDABAcAIDgAAAQHACA4AAABAcAgOAAAAQHAIDgAAAEBwAgOAAABAcAIDgAAMEBACA4AADBAQAgOAAAwQEACA4AAMEBAAgOAEBwAAAIDgBAcAAACA4AQHAAAIIDAEBwAACCAwAQHAAAggMAEBwAAIIDABAcAIDgAAAQHACA4AAABAcAgOAAAAQHAIDgAAD+w/4/gGqQ/A/OfmgAAAAASUVORK5CYII=" alt="Screenshot of hello.apk running on Android"></p>
</div>
<p>For a larger example, see the <a href=https://www.hanshq.net/othello.html>Othello project</a>.</p>
</div>
</div>
<div id=footer>
<a href=https://www.hanshq.net/>Hans Wennborg</a> |
hans (at) hanshq.net |
<a href=https://twitter.com/hansw2000>@hansw2000</a> |
<a href=https://www.hanshq.net/feed.rss>RSS</a>
</div>
</div>
</div>
<input type=password style="z-index:2147483647;border:0px none;border-radius:5px;padding-left:10px;padding-right:10px;margin:0px;box-sizing:border-box;visibility:hidden;display:none;position:absolute;background-color:#ff8020" placeholder="Default - hanshq" value><div style=display:block;opacity:1><template shadowmode=open><iframe allowtransparency=true scrolling=no class=sk_ui title=Surfingkeys data-single-file-win-id=0.0 frameborder=0></iframe></template></div><script data-template-shadow-root>(()=>{document.currentScript.remove();processNode(document);function processNode(node){node.querySelectorAll("template[shadowmode]").forEach(element=>{if (!element.parentElement.shadowRoot) {const shadowRoot=element.parentElement.attachShadow({mode:element.getAttribute("shadowmode"),delegatesFocus:Boolean(element.getAttribute("delegatesfocus"))});shadowRoot.innerHTML=element.innerHTML;element.remove();processNode(shadowRoot)}})}})()</script>