blob: c2b7c599749482b6bcf969ce4ac6cb52cf8e4df0 [file] [log] [blame]
Eric Parkc9931992019-07-29 13:10:53 +09001
Eric Parkc9931992019-07-29 13:10:53 +09002<!doctype html>
3<html lang="en" class="no-js">
4 <head>
5
6 <meta charset="utf-8">
7 <meta name="viewport" content="width=device-width,initial-scale=1">
Eric Parkc9931992019-07-29 13:10:53 +09008
9
10
Eric Parkc9931992019-07-29 13:10:53 +090011 <link rel="shortcut icon" href="../../assets/images/favicon.png">
Eric Park8fd7bfb2020-10-02 19:05:33 +090012 <meta name="generator" content="mkdocs-1.1.2, mkdocs-material-6.0.1">
Eric Parkc9931992019-07-29 13:10:53 +090013
14
15
Eric Park608ce5a2019-08-07 21:27:46 +080016 <title>Build Guide - Team Bliss</title>
Eric Parkc9931992019-07-29 13:10:53 +090017
18
19
Eric Park8fd7bfb2020-10-02 19:05:33 +090020 <link rel="stylesheet" href="../../assets/stylesheets/main.38780c08.min.css">
Eric Parkc9931992019-07-29 13:10:53 +090021
Eric Park8fd7bfb2020-10-02 19:05:33 +090022
23 <link rel="stylesheet" href="../../assets/stylesheets/palette.3f72e892.min.css">
24
Eric Parkc9931992019-07-29 13:10:53 +090025
26
27
Eric Parkc9931992019-07-29 13:10:53 +090028
29
Eric Park8fd7bfb2020-10-02 19:05:33 +090030
Eric Parkc9931992019-07-29 13:10:53 +090031 <link href="https://fonts.gstatic.com" rel="preconnect" crossorigin>
Eric Park8fd7bfb2020-10-02 19:05:33 +090032 <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,400i,700%7CRoboto+Mono&display=fallback">
33 <style>body,input{font-family:"Roboto",-apple-system,BlinkMacSystemFont,Helvetica,Arial,sans-serif}code,kbd,pre{font-family:"Roboto Mono",SFMono-Regular,Consolas,Menlo,monospace}</style>
Eric Parkc9931992019-07-29 13:10:53 +090034
35
Eric Parkc9931992019-07-29 13:10:53 +090036
37
38
39
40
41
42 </head>
43
Eric Parkc9931992019-07-29 13:10:53 +090044
Eric Park8fd7bfb2020-10-02 19:05:33 +090045
46
47
48
49
50 <body dir="ltr" data-md-color-scheme="" data-md-color-primary="none" data-md-color-accent="none">
51
52
Eric Parkc9931992019-07-29 13:10:53 +090053 <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
54 <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
Eric Park8fd7bfb2020-10-02 19:05:33 +090055 <label class="md-overlay" for="__drawer"></label>
56 <div data-md-component="skip">
57
58
59 <a href="#build-guide" class="md-skip">
60 Skip to content
61 </a>
62
63 </div>
64 <div data-md-component="announce">
65
66 </div>
Eric Parkc9931992019-07-29 13:10:53 +090067
68 <header class="md-header" data-md-component="header">
Eric Park8fd7bfb2020-10-02 19:05:33 +090069 <nav class="md-header-nav md-grid" aria-label="Header">
70 <a href="../.." title="Team Bliss" class="md-header-nav__button md-logo" aria-label="Team Bliss">
71
72
73 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 003-3 3 3 0 00-3-3 3 3 0 00-3 3 3 3 0 003 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54z"/></svg>
74
75 </a>
76 <label class="md-header-nav__button md-icon" for="__drawer">
77 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2z"/></svg>
78 </label>
79 <div class="md-header-nav__title" data-md-component="header-title">
80
81 <div class="md-header-nav__ellipsis">
82 <span class="md-header-nav__topic md-ellipsis">
83 Team Bliss
84 </span>
85 <span class="md-header-nav__topic md-ellipsis">
86
87 Build Guide
88
89 </span>
Eric Parkc9931992019-07-29 13:10:53 +090090 </div>
Eric Park8fd7bfb2020-10-02 19:05:33 +090091
92 </div>
93
94 <label class="md-header-nav__button md-icon" for="__search">
95 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0116 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 019.5 16 6.5 6.5 0 013 9.5 6.5 6.5 0 019.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg>
96 </label>
97
Eric Parkc9931992019-07-29 13:10:53 +090098<div class="md-search" data-md-component="search" role="dialog">
99 <label class="md-search__overlay" for="__search"></label>
100 <div class="md-search__inner" role="search">
101 <form class="md-search__form" name="search">
Eric Park8fd7bfb2020-10-02 19:05:33 +0900102 <input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" data-md-state="active">
103 <label class="md-search__icon md-icon" for="__search">
104 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0116 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 019.5 16 6.5 6.5 0 013 9.5 6.5 6.5 0 019.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg>
105 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg>
106 </label>
107 <button type="reset" class="md-search__icon md-icon" aria-label="Clear" data-md-component="search-reset" tabindex="-1">
108 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z"/></svg>
Eric Parkc9931992019-07-29 13:10:53 +0900109 </button>
110 </form>
111 <div class="md-search__output">
112 <div class="md-search__scrollwrap" data-md-scrollfix>
Eric Park8fd7bfb2020-10-02 19:05:33 +0900113 <div class="md-search-result" data-md-component="search-result">
Eric Parkc9931992019-07-29 13:10:53 +0900114 <div class="md-search-result__meta">
Eric Park8fd7bfb2020-10-02 19:05:33 +0900115 Initializing search
Eric Parkc9931992019-07-29 13:10:53 +0900116 </div>
117 <ol class="md-search-result__list"></ol>
118 </div>
119 </div>
120 </div>
121 </div>
122</div>
Eric Park8fd7bfb2020-10-02 19:05:33 +0900123
124
Eric Parkc9931992019-07-29 13:10:53 +0900125 </nav>
126</header>
127
Eric Park8fd7bfb2020-10-02 19:05:33 +0900128 <div class="md-container" data-md-component="container">
129
Eric Parkc9931992019-07-29 13:10:53 +0900130
131
132
Eric Park8fd7bfb2020-10-02 19:05:33 +0900133 <main class="md-main" data-md-component="main">
134 <div class="md-main__inner md-grid">
Eric Parkc9931992019-07-29 13:10:53 +0900135
136
137 <div class="md-sidebar md-sidebar--primary" data-md-component="navigation">
138 <div class="md-sidebar__scrollwrap">
139 <div class="md-sidebar__inner">
Eric Park8fd7bfb2020-10-02 19:05:33 +0900140 <nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
141 <label class="md-nav__title" for="__drawer">
142 <a href="../.." title="Team Bliss" class="md-nav__button md-logo" aria-label="Team Bliss">
Eric Parkc9931992019-07-29 13:10:53 +0900143
Eric Park8fd7bfb2020-10-02 19:05:33 +0900144
145 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 003-3 3 3 0 00-3-3 3 3 0 00-3 3 3 3 0 003 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54z"/></svg>
146
Eric Parkc9931992019-07-29 13:10:53 +0900147 </a>
148 Team Bliss
149 </label>
150
151 <ul class="md-nav__list" data-md-scrollfix>
152
153
154
155
156
157
158 <li class="md-nav__item">
Eric Park5e3a1012019-08-12 13:17:03 +0800159 <a href="../.." title="Home" class="md-nav__link">
160 Home
Eric Parkc9931992019-07-29 13:10:53 +0900161 </a>
162 </li>
163
164
165
166
167
168
169
170 <li class="md-nav__item md-nav__item--nested">
171
Eric Park8fd7bfb2020-10-02 19:05:33 +0900172 <input class="md-nav__toggle md-toggle" data-md-toggle="nav-2" type="checkbox" id="nav-2">
Eric Parkc9931992019-07-29 13:10:53 +0900173
174 <label class="md-nav__link" for="nav-2">
175 Bliss OS
Eric Park8fd7bfb2020-10-02 19:05:33 +0900176 <span class="md-nav__icon md-icon"></span>
Eric Parkc9931992019-07-29 13:10:53 +0900177 </label>
Eric Park8fd7bfb2020-10-02 19:05:33 +0900178 <nav class="md-nav" aria-label="Bliss OS" data-md-level="1">
Eric Parkc9931992019-07-29 13:10:53 +0900179 <label class="md-nav__title" for="nav-2">
Eric Park8fd7bfb2020-10-02 19:05:33 +0900180 <span class="md-nav__icon md-icon"></span>
Eric Parkc9931992019-07-29 13:10:53 +0900181 Bliss OS
182 </label>
183 <ul class="md-nav__list" data-md-scrollfix>
184
185
186
187
188
189
190
191 <li class="md-nav__item">
Eric Park8fd7bfb2020-10-02 19:05:33 +0900192 <a href="../../Bliss%20OS/" title="Index" class="md-nav__link">
Eric Parkc9931992019-07-29 13:10:53 +0900193 Index
194 </a>
195 </li>
196
197
Eric Park608ce5a2019-08-07 21:27:46 +0800198
199
200
201
202
203 <li class="md-nav__item">
Eric Park8fd7bfb2020-10-02 19:05:33 +0900204 <a href="../../Bliss%20OS/build-guide/" title="Build Guide" class="md-nav__link">
Eric Park5e3a1012019-08-12 13:17:03 +0800205 Build Guide
206 </a>
207 </li>
208
209
210
211
212
213
214
215 <li class="md-nav__item">
Eric Park8fd7bfb2020-10-02 19:05:33 +0900216 <a href="../../Bliss%20OS/extras/" title="Extras" class="md-nav__link">
Eric Park608ce5a2019-08-07 21:27:46 +0800217 Extras
218 </a>
219 </li>
220
221
222
223
224
225
226
227 <li class="md-nav__item">
Eric Park8fd7bfb2020-10-02 19:05:33 +0900228 <a href="../../Bliss%20OS/installation-guide-misc/" title="Installation Guide (Misc)" class="md-nav__link">
Eric Parkd09b00e2020-02-15 11:07:48 +0900229 Installation Guide (Misc)
230 </a>
231 </li>
232
233
234
235
236
237
238
239 <li class="md-nav__item">
Eric Park8fd7bfb2020-10-02 19:05:33 +0900240 <a href="../../Bliss%20OS/installation-guide-surface-devices/" title="Installation Guide (Surface devices)" class="md-nav__link">
Eric Parkd09b00e2020-02-15 11:07:48 +0900241 Installation Guide (Surface devices)
242 </a>
243 </li>
244
245
246
247
248
249
250
251 <li class="md-nav__item">
Eric Park8fd7bfb2020-10-02 19:05:33 +0900252 <a href="../../Bliss%20OS/installation-guide/" title="Installation Guide" class="md-nav__link">
Eric Park608ce5a2019-08-07 21:27:46 +0800253 Installation Guide
254 </a>
255 </li>
256
257
258
259
260
261
262
263 <li class="md-nav__item">
Eric Park8fd7bfb2020-10-02 19:05:33 +0900264 <a href="../../Bliss%20OS/taking-bug-reports/" title="Taking bug reports" class="md-nav__link">
Eric Park0509f652020-03-01 01:54:39 +0900265 Taking bug reports
266 </a>
267 </li>
268
269
270
271
272
273
274
275 <li class="md-nav__item">
Eric Park8fd7bfb2020-10-02 19:05:33 +0900276 <a href="../../Bliss%20OS/troubleshooting/" title="Troubleshooting" class="md-nav__link">
Eric Park608ce5a2019-08-07 21:27:46 +0800277 Troubleshooting
278 </a>
279 </li>
280
281
Eric Parkc9931992019-07-29 13:10:53 +0900282 </ul>
283 </nav>
284 </li>
285
286
287
288
289
290
291
292
293
294 <li class="md-nav__item md-nav__item--active md-nav__item--nested">
295
Eric Park8fd7bfb2020-10-02 19:05:33 +0900296 <input class="md-nav__toggle md-toggle" data-md-toggle="nav-3" type="checkbox" id="nav-3" checked>
Eric Parkc9931992019-07-29 13:10:53 +0900297
298 <label class="md-nav__link" for="nav-3">
299 BlissRoms
Eric Park8fd7bfb2020-10-02 19:05:33 +0900300 <span class="md-nav__icon md-icon"></span>
Eric Parkc9931992019-07-29 13:10:53 +0900301 </label>
Eric Park8fd7bfb2020-10-02 19:05:33 +0900302 <nav class="md-nav" aria-label="BlissRoms" data-md-level="1">
Eric Parkc9931992019-07-29 13:10:53 +0900303 <label class="md-nav__title" for="nav-3">
Eric Park8fd7bfb2020-10-02 19:05:33 +0900304 <span class="md-nav__icon md-icon"></span>
Eric Parkc9931992019-07-29 13:10:53 +0900305 BlissRoms
306 </label>
307 <ul class="md-nav__list" data-md-scrollfix>
308
309
310
311
312
313
314
315 <li class="md-nav__item">
316 <a href="../" title="Index" class="md-nav__link">
317 Index
318 </a>
319 </li>
320
321
322
323
324
325
326
327
328
329 <li class="md-nav__item md-nav__item--active">
330
Eric Park8fd7bfb2020-10-02 19:05:33 +0900331 <input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc">
Eric Parkc9931992019-07-29 13:10:53 +0900332
333
334
335
336 <label class="md-nav__link md-nav__link--active" for="__toc">
Eric Park608ce5a2019-08-07 21:27:46 +0800337 Build Guide
Eric Park8fd7bfb2020-10-02 19:05:33 +0900338 <span class="md-nav__icon md-icon"></span>
Eric Parkc9931992019-07-29 13:10:53 +0900339 </label>
340
Eric Park608ce5a2019-08-07 21:27:46 +0800341 <a href="./" title="Build Guide" class="md-nav__link md-nav__link--active">
342 Build Guide
Eric Parkc9931992019-07-29 13:10:53 +0900343 </a>
344
345
Eric Park8fd7bfb2020-10-02 19:05:33 +0900346<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
Eric Parkc9931992019-07-29 13:10:53 +0900347
348
349
350
351
Eric Park8fd7bfb2020-10-02 19:05:33 +0900352 <label class="md-nav__title" for="__toc">
353 <span class="md-nav__icon md-icon"></span>
354 Table of contents
355 </label>
Eric Parkc9931992019-07-29 13:10:53 +0900356 <ul class="md-nav__list" data-md-scrollfix>
357
358 <li class="md-nav__item">
Eric Parkd5cc44a2019-10-21 12:15:48 +0800359 <a href="#updated-for-android-10-q" class="md-nav__link">
360 Updated for Android 10 (q)
Eric Parkc9931992019-07-29 13:10:53 +0900361 </a>
362
Eric Park8fd7bfb2020-10-02 19:05:33 +0900363 <nav class="md-nav" aria-label="Updated for Android 10 (q)">
Eric Parkc9931992019-07-29 13:10:53 +0900364 <ul class="md-nav__list">
365
366 <li class="md-nav__item">
Eric Park45174ca2019-10-21 01:38:33 +0800367 <a href="#introduction" class="md-nav__link">
Eric Parkc9931992019-07-29 13:10:53 +0900368 Introduction
369 </a>
370
371</li>
372
373 <li class="md-nav__item">
Eric Park45174ca2019-10-21 01:38:33 +0800374 <a href="#preparation" class="md-nav__link">
Eric Parkc9931992019-07-29 13:10:53 +0900375 Preparation
376 </a>
377
378</li>
379
380 <li class="md-nav__item">
Eric Park45174ca2019-10-21 01:38:33 +0800381 <a href="#install-the-jdk" class="md-nav__link">
Eric Parkc9931992019-07-29 13:10:53 +0900382 Install the JDK
383 </a>
384
385</li>
386
387 <li class="md-nav__item">
Eric Park45174ca2019-10-21 01:38:33 +0800388 <a href="#install-build-tools" class="md-nav__link">
Eric Parkc9931992019-07-29 13:10:53 +0900389 Install build tools
390 </a>
391
392</li>
393
394 <li class="md-nav__item">
Eric Park45174ca2019-10-21 01:38:33 +0800395 <a href="#install-source-code-tools" class="md-nav__link">
Eric Parkc9931992019-07-29 13:10:53 +0900396 Install source code tools
397 </a>
398
Eric Park8fd7bfb2020-10-02 19:05:33 +0900399 <nav class="md-nav" aria-label="Install source code tools">
Eric Parkc9931992019-07-29 13:10:53 +0900400 <ul class="md-nav__list">
401
402 <li class="md-nav__item">
Eric Park45174ca2019-10-21 01:38:33 +0800403 <a href="#what-is-source" class="md-nav__link">
Eric Parkc9931992019-07-29 13:10:53 +0900404 What is source?
405 </a>
406
407</li>
408
Eric Parkc9931992019-07-29 13:10:53 +0900409 </ul>
410 </nav>
411
412</li>
413
414 <li class="md-nav__item">
Eric Park45174ca2019-10-21 01:38:33 +0800415 <a href="#download" class="md-nav__link">
Eric Parkc9931992019-07-29 13:10:53 +0900416 Download
417 </a>
418
419</li>
420
421 <li class="md-nav__item">
Eric Park45174ca2019-10-21 01:38:33 +0800422 <a href="#build" class="md-nav__link">
Eric Parkc9931992019-07-29 13:10:53 +0900423 Build
424 </a>
425
Eric Park8fd7bfb2020-10-02 19:05:33 +0900426 <nav class="md-nav" aria-label="Build">
Eric Parkc9931992019-07-29 13:10:53 +0900427 <ul class="md-nav__list">
428
429 <li class="md-nav__item">
Eric Park45174ca2019-10-21 01:38:33 +0800430 <a href="#my-device-isnt-booting-and-userdebug-wont-print-any-adb-logcats-what-gives" class="md-nav__link">
Eric Park608ce5a2019-08-07 21:27:46 +0800431 My device isn't booting, and userdebug won't print any adb logcats. What gives?
432 </a>
433
434</li>
435
436 <li class="md-nav__item">
Eric Park45174ca2019-10-21 01:38:33 +0800437 <a href="#why-mka-and-not-make" class="md-nav__link">
Eric Park35d8ee32019-08-11 01:34:35 +0800438 Why mka and not make?
439 </a>
440
441</li>
442
443 <li class="md-nav__item">
Eric Park45174ca2019-10-21 01:38:33 +0800444 <a href="#i-get-an-error-about-no-blissify-targets-to-build-against-whats-wrong" class="md-nav__link">
Eric Park608ce5a2019-08-07 21:27:46 +0800445 I get an error about no blissify targets to build against, what's wrong?
Eric Parkc9931992019-07-29 13:10:53 +0900446 </a>
447
448</li>
449
450 </ul>
451 </nav>
452
453</li>
454
455 <li class="md-nav__item">
Eric Park45174ca2019-10-21 01:38:33 +0800456 <a href="#after-building" class="md-nav__link">
Eric Parkc9931992019-07-29 13:10:53 +0900457 After building
458 </a>
459
460</li>
461
462 <li class="md-nav__item">
Eric Park45174ca2019-10-21 01:38:33 +0800463 <a href="#troubleshooting" class="md-nav__link">
Eric Parkc9931992019-07-29 13:10:53 +0900464 Troubleshooting
465 </a>
466
467</li>
468
469 <li class="md-nav__item">
Eric Park45174ca2019-10-21 01:38:33 +0800470 <a href="#conclusion" class="md-nav__link">
Eric Parkc9931992019-07-29 13:10:53 +0900471 Conclusion
472 </a>
473
474</li>
475
476 <li class="md-nav__item">
Eric Park45174ca2019-10-21 01:38:33 +0800477 <a href="#looking-for-the-next-tutorial" class="md-nav__link">
Eric Parkc9931992019-07-29 13:10:53 +0900478 Looking for the next tutorial?
479 </a>
480
481</li>
482
483 </ul>
484 </nav>
485
486</li>
487
Eric Parkc9931992019-07-29 13:10:53 +0900488 </ul>
489
490</nav>
491
492 </li>
493
494
495
496
497
498
499
500 <li class="md-nav__item">
501 <a href="../build-tips/" title="Build Tips" class="md-nav__link">
502 Build Tips
503 </a>
504 </li>
505
506
507 </ul>
508 </nav>
509 </li>
510
511
512
513
514
515
516
517 <li class="md-nav__item md-nav__item--nested">
518
Eric Park8fd7bfb2020-10-02 19:05:33 +0900519 <input class="md-nav__toggle md-toggle" data-md-toggle="nav-4" type="checkbox" id="nav-4">
Eric Parkc9931992019-07-29 13:10:53 +0900520
521 <label class="md-nav__link" for="nav-4">
522 Common
Eric Park8fd7bfb2020-10-02 19:05:33 +0900523 <span class="md-nav__icon md-icon"></span>
Eric Parkc9931992019-07-29 13:10:53 +0900524 </label>
Eric Park8fd7bfb2020-10-02 19:05:33 +0900525 <nav class="md-nav" aria-label="Common" data-md-level="1">
Eric Parkc9931992019-07-29 13:10:53 +0900526 <label class="md-nav__title" for="nav-4">
Eric Park8fd7bfb2020-10-02 19:05:33 +0900527 <span class="md-nav__icon md-icon"></span>
Eric Parkc9931992019-07-29 13:10:53 +0900528 Common
529 </label>
530 <ul class="md-nav__list" data-md-scrollfix>
531
532
533
534
535
536
537
538 <li class="md-nav__item">
539 <a href="../../common/" title="Index" class="md-nav__link">
540 Index
541 </a>
542 </li>
543
544
545
546
547
548
549
550 <li class="md-nav__item">
551 <a href="../../common/git-started/" title="Git Started" class="md-nav__link">
552 Git Started
553 </a>
554 </li>
555
556
Eric Park608ce5a2019-08-07 21:27:46 +0800557
558
559
560
561
562 <li class="md-nav__item">
Eric Park8584eda2019-09-02 09:45:55 +0800563 <a href="../../common/maintaining-proper-authorship/" title="Maintaining proper authorship" class="md-nav__link">
564 Maintaining proper authorship
565 </a>
566 </li>
567
568
569
570
571
572
573
574 <li class="md-nav__item">
Eric Park608ce5a2019-08-07 21:27:46 +0800575 <a href="../../common/using-dippy-bird/" title="Using `dippy-bird`" class="md-nav__link">
576 Using `dippy-bird`
577 </a>
578 </li>
579
580
Eric Parkc9931992019-07-29 13:10:53 +0900581 </ul>
582 </nav>
583 </li>
584
585
586
587
588
589
590
591 <li class="md-nav__item md-nav__item--nested">
592
Eric Park8fd7bfb2020-10-02 19:05:33 +0900593 <input class="md-nav__toggle md-toggle" data-md-toggle="nav-5" type="checkbox" id="nav-5">
Eric Parkc9931992019-07-29 13:10:53 +0900594
595 <label class="md-nav__link" for="nav-5">
596 Infrastructure
Eric Park8fd7bfb2020-10-02 19:05:33 +0900597 <span class="md-nav__icon md-icon"></span>
Eric Parkc9931992019-07-29 13:10:53 +0900598 </label>
Eric Park8fd7bfb2020-10-02 19:05:33 +0900599 <nav class="md-nav" aria-label="Infrastructure" data-md-level="1">
Eric Parkc9931992019-07-29 13:10:53 +0900600 <label class="md-nav__title" for="nav-5">
Eric Park8fd7bfb2020-10-02 19:05:33 +0900601 <span class="md-nav__icon md-icon"></span>
Eric Parkc9931992019-07-29 13:10:53 +0900602 Infrastructure
603 </label>
604 <ul class="md-nav__list" data-md-scrollfix>
605
606
607
608
609
610
611
612 <li class="md-nav__item">
613 <a href="../../infrastructure/" title="Index" class="md-nav__link">
614 Index
615 </a>
616 </li>
617
618
619 </ul>
620 </nav>
621 </li>
622
623
624 </ul>
625</nav>
626 </div>
627 </div>
628 </div>
629
630
631 <div class="md-sidebar md-sidebar--secondary" data-md-component="toc">
632 <div class="md-sidebar__scrollwrap">
633 <div class="md-sidebar__inner">
634
Eric Park8fd7bfb2020-10-02 19:05:33 +0900635<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
Eric Parkc9931992019-07-29 13:10:53 +0900636
637
638
639
640
Eric Park8fd7bfb2020-10-02 19:05:33 +0900641 <label class="md-nav__title" for="__toc">
642 <span class="md-nav__icon md-icon"></span>
643 Table of contents
644 </label>
Eric Parkc9931992019-07-29 13:10:53 +0900645 <ul class="md-nav__list" data-md-scrollfix>
646
647 <li class="md-nav__item">
Eric Parkd5cc44a2019-10-21 12:15:48 +0800648 <a href="#updated-for-android-10-q" class="md-nav__link">
649 Updated for Android 10 (q)
Eric Parkc9931992019-07-29 13:10:53 +0900650 </a>
651
Eric Park8fd7bfb2020-10-02 19:05:33 +0900652 <nav class="md-nav" aria-label="Updated for Android 10 (q)">
Eric Parkc9931992019-07-29 13:10:53 +0900653 <ul class="md-nav__list">
654
655 <li class="md-nav__item">
Eric Park45174ca2019-10-21 01:38:33 +0800656 <a href="#introduction" class="md-nav__link">
Eric Parkc9931992019-07-29 13:10:53 +0900657 Introduction
658 </a>
659
660</li>
661
662 <li class="md-nav__item">
Eric Park45174ca2019-10-21 01:38:33 +0800663 <a href="#preparation" class="md-nav__link">
Eric Parkc9931992019-07-29 13:10:53 +0900664 Preparation
665 </a>
666
667</li>
668
669 <li class="md-nav__item">
Eric Park45174ca2019-10-21 01:38:33 +0800670 <a href="#install-the-jdk" class="md-nav__link">
Eric Parkc9931992019-07-29 13:10:53 +0900671 Install the JDK
672 </a>
673
674</li>
675
676 <li class="md-nav__item">
Eric Park45174ca2019-10-21 01:38:33 +0800677 <a href="#install-build-tools" class="md-nav__link">
Eric Parkc9931992019-07-29 13:10:53 +0900678 Install build tools
679 </a>
680
681</li>
682
683 <li class="md-nav__item">
Eric Park45174ca2019-10-21 01:38:33 +0800684 <a href="#install-source-code-tools" class="md-nav__link">
Eric Parkc9931992019-07-29 13:10:53 +0900685 Install source code tools
686 </a>
687
Eric Park8fd7bfb2020-10-02 19:05:33 +0900688 <nav class="md-nav" aria-label="Install source code tools">
Eric Parkc9931992019-07-29 13:10:53 +0900689 <ul class="md-nav__list">
690
691 <li class="md-nav__item">
Eric Park45174ca2019-10-21 01:38:33 +0800692 <a href="#what-is-source" class="md-nav__link">
Eric Parkc9931992019-07-29 13:10:53 +0900693 What is source?
694 </a>
695
696</li>
697
Eric Parkc9931992019-07-29 13:10:53 +0900698 </ul>
699 </nav>
700
701</li>
702
703 <li class="md-nav__item">
Eric Park45174ca2019-10-21 01:38:33 +0800704 <a href="#download" class="md-nav__link">
Eric Parkc9931992019-07-29 13:10:53 +0900705 Download
706 </a>
707
708</li>
709
710 <li class="md-nav__item">
Eric Park45174ca2019-10-21 01:38:33 +0800711 <a href="#build" class="md-nav__link">
Eric Parkc9931992019-07-29 13:10:53 +0900712 Build
713 </a>
714
Eric Park8fd7bfb2020-10-02 19:05:33 +0900715 <nav class="md-nav" aria-label="Build">
Eric Parkc9931992019-07-29 13:10:53 +0900716 <ul class="md-nav__list">
717
718 <li class="md-nav__item">
Eric Park45174ca2019-10-21 01:38:33 +0800719 <a href="#my-device-isnt-booting-and-userdebug-wont-print-any-adb-logcats-what-gives" class="md-nav__link">
Eric Park608ce5a2019-08-07 21:27:46 +0800720 My device isn't booting, and userdebug won't print any adb logcats. What gives?
721 </a>
722
723</li>
724
725 <li class="md-nav__item">
Eric Park45174ca2019-10-21 01:38:33 +0800726 <a href="#why-mka-and-not-make" class="md-nav__link">
Eric Park35d8ee32019-08-11 01:34:35 +0800727 Why mka and not make?
728 </a>
729
730</li>
731
732 <li class="md-nav__item">
Eric Park45174ca2019-10-21 01:38:33 +0800733 <a href="#i-get-an-error-about-no-blissify-targets-to-build-against-whats-wrong" class="md-nav__link">
Eric Park608ce5a2019-08-07 21:27:46 +0800734 I get an error about no blissify targets to build against, what's wrong?
Eric Parkc9931992019-07-29 13:10:53 +0900735 </a>
736
737</li>
738
739 </ul>
740 </nav>
741
742</li>
743
744 <li class="md-nav__item">
Eric Park45174ca2019-10-21 01:38:33 +0800745 <a href="#after-building" class="md-nav__link">
Eric Parkc9931992019-07-29 13:10:53 +0900746 After building
747 </a>
748
749</li>
750
751 <li class="md-nav__item">
Eric Park45174ca2019-10-21 01:38:33 +0800752 <a href="#troubleshooting" class="md-nav__link">
Eric Parkc9931992019-07-29 13:10:53 +0900753 Troubleshooting
754 </a>
755
756</li>
757
758 <li class="md-nav__item">
Eric Park45174ca2019-10-21 01:38:33 +0800759 <a href="#conclusion" class="md-nav__link">
Eric Parkc9931992019-07-29 13:10:53 +0900760 Conclusion
761 </a>
762
763</li>
764
765 <li class="md-nav__item">
Eric Park45174ca2019-10-21 01:38:33 +0800766 <a href="#looking-for-the-next-tutorial" class="md-nav__link">
Eric Parkc9931992019-07-29 13:10:53 +0900767 Looking for the next tutorial?
768 </a>
769
770</li>
771
772 </ul>
773 </nav>
774
775</li>
776
Eric Parkc9931992019-07-29 13:10:53 +0900777 </ul>
778
779</nav>
780 </div>
781 </div>
782 </div>
783
784
785 <div class="md-content">
786 <article class="md-content__inner md-typeset">
787
788
789
Eric Park608ce5a2019-08-07 21:27:46 +0800790 <h1 id="build-guide">Build Guide</h1>
Eric Parkd5cc44a2019-10-21 12:15:48 +0800791<h2 id="updated-for-android-10-q">Updated for Android 10 (q)</h2>
Eric Parkc9931992019-07-29 13:10:53 +0900792<h3 id="introduction">Introduction</h3>
793<p>This is the official guide to build BlissRoms for your device. In this guide, we will only cover official devices with actual maintainers. We will not delve into porting devices.</p>
794<p>The golden rule to building is patience. If something breaks, wait for your maintainer to fix it, send a polite message to your maintainer, or better yet, try and fix it yourself. Then you can make a merge request and contribute!</p>
795<p>Let’s get started.</p>
796<h3 id="preparation">Preparation</h3>
Eric Park608ce5a2019-08-07 21:27:46 +0800797<p>To get started, you need a computer with Ubuntu 18.04 (LTS), at least 200GB space of HDD, and at least 8GB RAM. A decent CPU (or CPUs if you have a server motherboard) is recommended. Other distros can work but is not officially supported in this guide.</p>
798<p>Underpowered machines may crash during compilation. If that happens, you may try and restart the build as most crashes are caused by lack of memory. If your storage space has run out, then you will need to build on a different hard drive.</p>
Eric Parkc9931992019-07-29 13:10:53 +0900799<h3 id="install-the-jdk">Install the JDK</h3>
800<p>Install OpenJDK:</p>
801<pre><code>sudo apt install openjdk-8-jdk
802</code></pre>
803<h3 id="install-build-tools">Install build tools</h3>
Eric Park608ce5a2019-08-07 21:27:46 +0800804<p>To install the required build tools, run the following command:</p>
805<pre><code>sudo apt install git gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev lib32z1-dev ccache libgl1-mesa-dev libxml2 libxml2-utils xsltproc unzip squashfs-tools python python-mako libssl-dev ninja-build lunzip syslinux syslinux-utils gettext genisoimage bc xorriso liblz4-tool libncurses5-dev libsdl1.2-dev libwxgtk3.0-dev lzop maven pngcrush schedtool lib32readline-dev
Eric Parkc9931992019-07-29 13:10:53 +0900806</code></pre>
807<h3 id="install-source-code-tools">Install source code tools</h3>
Eric Parkf1180122019-12-28 17:11:20 +0900808<p>Now we need to get the source code via a program named <code>repo</code>. The primary function of <code>repo</code> is to read a manifest file located in BlissRoms's GitHub organization, and find what repositories you need to actually build Android.</p>
Eric Park608ce5a2019-08-07 21:27:46 +0800809<p>Create a <code>~/bin</code> directory for <code>repo</code>:</p>
Eric Parkc9931992019-07-29 13:10:53 +0900810<pre><code>mkdir -p ~/bin
811</code></pre>
812<p>The <code>-p</code> flag instructs <code>mkdir</code> to <em>only</em> create the directory if it does not exist in the first place. Now download the <code>repo</code> tool into <code>~/bin</code>:</p>
813<pre><code>curl https://storage.googleapis.com/git-repo-downloads/repo &gt; ~/bin/repo
814</code></pre>
815<p>Make <code>repo</code> executable:</p>
816<pre><code>chmod a+x ~/bin/repo
817</code></pre>
818<p>And add it to PATH:</p>
819<pre><code>nano .bashrc
820</code></pre>
821<p>Scroll to the end of the file and type these lines:</p>
822<pre><code># Export ~/bin
823export PATH=~/bin:$PATH
824</code></pre>
825<p>Ctrl-O and enter to save, then Ctrl-X to exit nano. Now either logout and login again (or reboot), or <code>source</code> the file:</p>
826<pre><code>source .bashrc
827</code></pre>
828<p>Which can be shortened to:</p>
829<pre><code>. .bashrc
830</code></pre>
831<h4 id="what-is-source">What is <code>source</code>?</h4>
832<p><code>source</code> is a <code>bash</code> command to read aliases, functions, and commands from the specified file. Typically, you'll supply <code>bash</code> with a configuration file such as <code>.bashrc</code> or <code>.bash_profile</code>, or an initialization file such as <code>envsetup.sh</code>. The difference is that while the configuration file lists configuration and user-defined aliases and functions, initialization files typically hold build commands such as <code>breakfast</code>, <code>brunch</code>, and <code>lunch</code>. Without those commands building would be significantly harder as you would have to memorize the long command to invoke a build manually!</p>
833<p>But why do you need to run it after modifying a file? Well, <code>bash</code> cannot automatically detect changes in our files. To solve this, we either <code>source</code> it or log out and log back in, forcing <code>bash</code> to reload configuration files. Keep this in mind, because unlike configuration files, if you forget to <code>source</code> initialization files, build commands will not function!</p>
Eric Parkc9931992019-07-29 13:10:53 +0900834<h3 id="download">Download</h3>
835<p>Create a directory for the source:</p>
Eric Parkd5cc44a2019-10-21 12:15:48 +0800836<pre><code>mkdir -p ~/bliss/q
837cd ~/bliss/q
Eric Parkc9931992019-07-29 13:10:53 +0900838</code></pre>
839<p>Before we download, we need to tell <code>repo</code> and <code>git</code> who we are. Run the following commands, substituting your information:</p>
Eric Parkf1180122019-12-28 17:11:20 +0900840<pre><code>git config --global user.email "john.appleseed@example.com"
841git config --global user.name "John Appleseed"
Eric Parkc9931992019-07-29 13:10:53 +0900842</code></pre>
843<p>Now, we’re ready to initialize. We need to tell <code>repo</code> which manifest to read:</p>
Eric Parkd5cc44a2019-10-21 12:15:48 +0800844<pre><code>repo init -u https://github.com/BlissRoms/platform_manifest.git -b q
Eric Parkc9931992019-07-29 13:10:53 +0900845</code></pre>
Eric Parkd5cc44a2019-10-21 12:15:48 +0800846<p><code>-b</code> is for the branch, and we’re on <code>q</code>, Android 10. It’ll take a couple of seconds. You may need to type <code>y</code> for the color prompt.</p>
Eric Parkc9931992019-07-29 13:10:53 +0900847<p>Then sync the source:</p>
Eric Parkf1180122019-12-28 17:11:20 +0900848<pre><code>repo sync -j$(nproc --all) -c
Eric Parkc9931992019-07-29 13:10:53 +0900849</code></pre>
Eric Parkf1180122019-12-28 17:11:20 +0900850<p><em>Note: For more information about the <code>repo</code> tool, visit the <a href="../build-tips/">Build Tips guide</a> to learn more about the <a href="../build-tips/#repo-optimization-tips">repo flags</a>.</em></p>
Eric Parkc9931992019-07-29 13:10:53 +0900851<p><code>repo</code> will start downloading all the code. That’s going to be slow, even on a fiber network. Expect downloads to take more than a couple hours.</p>
852<h3 id="build">Build</h3>
853<p>Set up the build environment:</p>
854<pre><code>. build/envsetup.sh
855</code></pre>
856<p>This is the initialization file we talked about earlier up top. This "initializes" the environment, and imports a bunch of useful build commands required to build your device. Again, you need to remember to <code>source</code> this file every time you log out and log back in, or launch a new <code>bash</code>/Terminal instance.</p>
857<p>Define what device you’re going to build. For example, the Nexus 5X, has a codename of <code>bullhead</code>. You can check your specific device's codename on GitHub or on Google. Execute:</p>
858<pre><code>breakfast bullhead
859</code></pre>
860<p>What does this do? <code>breakfast</code> searches repositories for your device "tree", which contains all the details needed to make the build suitable for your device. CPU, kernel info, device screen size, whether the board has Bluetooth, NFC, what frequencies the build needs for Wi-Fi, and a bunch of other things. <code>breakfast</code> will automatically search in the <code>BlissRoms-Devices</code> GitHub repository, and grab your device tree for you.</p>
861<p>Okay, so we have the device tree set up. Feel free to browse around the source code to see what changed. You should see folders added to <code>device/</code>, <code>kernel/</code> and <code>vendor/</code>. A shortcut:</p>
862<pre><code>croot
863</code></pre>
864<p>will dump you back in the root of the source code tree. So if you’ve been going through folders and don’t have any idea where you are, you can use the above command. This command, however, requires you to have <code>source</code>d <code>build/envsetup.sh</code> earlier.</p>
Eric Park608ce5a2019-08-07 21:27:46 +0800865<p>We're ready to build, but before we teach you the easy command to execute a build, we will first try the manual method. To set up the current terminal environment for building your particular device, execute:</p>
866<pre><code>lunch bliss_bullhead-userdebug
Eric Parkc9931992019-07-29 13:10:53 +0900867</code></pre>
Eric Park608ce5a2019-08-07 21:27:46 +0800868<p>Let's break down the command. <code>lunch</code> initializes the proper environmental variables required for the build tools to build your specific device. Things like <code>BLISS_DEVICE</code> and other variables are set in this stage, and the changed variables will be shown as output. <code>bliss_</code> is the ROM that we are building. As convention, all devices will have this prefix. <code>bullhead</code> is the specific device we are building - in this case, the Nexus 5X. Finally, <code>userdebug</code> means that we will build a user-debuggable variant. This is usually what most ROMs use for publishing their builds. Manufacturers typically use <code>user</code> which disables most of the useful Android Logcats.</p>
869<h4 id="my-device-isnt-booting-and-userdebug-wont-print-any-adb-logcats-what-gives">My device isn't booting, and <code>userdebug</code> won't print any <code>adb logcat</code>s. What gives?</h4>
870<p>There is a third build variant called <code>eng</code>, short for engineering builds. These builds will activate <code>adb logcat</code> during boot, and will show you exactly what is going wrong, where, and why. However, these builds are <strong>NOT</strong> recommended for normal usage as they are not securely hardened, have log spam that will slow down your device, and other unexpected problems like userspace utilities crashing during runtime. If you want to submit your device for mainline, do <strong>NOT</strong> submit an <code>eng</code> build!</p>
871<p>All set? Let's start the building process. Run:</p>
Eric Park35d8ee32019-08-11 01:34:35 +0800872<p><code>mka blissify</code></p>
Eric Park608ce5a2019-08-07 21:27:46 +0800873<p>And the build should start. The build process will take a long time. Prepare to wait a few hours, even on a decent machine.</p>
Eric Park35d8ee32019-08-11 01:34:35 +0800874<h4 id="why-mka-and-not-make">Why <code>mka</code> and not <code>make</code>?</h4>
875<p><code>make</code> only runs with 1 thread. <code>mka</code> is properly aliased to use all of your threads by checking <code>nproc</code>.</p>
Eric Parkd5cc44a2019-10-21 12:15:48 +0800876<p>If you want to customize your thread count (maybe you're building with a fan-screaming laptop in a quiet coffee shop), use <code>make blissify -j#</code>, replacing the hash with the number of threads (example of <code>make blissify -j4</code>).</p>
Eric Park608ce5a2019-08-07 21:27:46 +0800877<h4 id="i-get-an-error-about-no-blissify-targets-to-build-against-whats-wrong">I get an error about no <code>blissify</code> targets to build against, what's wrong?</h4>
878<p>If you are building other ROMs, it is usually <code>make bacon</code>. For BlissRoms, we chose the build target of <code>blissify</code>. If that doesn't work, sometimes there is a bug, or the ROM developers do not implement a <code>bacon</code> target to build against. In this case, you will need to find what name they use to initialize a full build of the ROM. Conventionally, it is supposed to be <code>bacon</code>, but some ROM developers change this name inadvertently, or actually have a bug that causes the build target to never be found. If you cannot locate the build target, ask the developers of the ROM. Alternatively, you can try poking around in <code>build/make/core/Makefile</code> to see what the build target name is. But this is out of the scope of this article as you're not supposed to be building other ROMs (that's not what this tutorial is for, sorry!)</p>
879<p>All right, but that's annoying. You had to type <strong>three</strong> commands to build it all. What about running one command?</p>
880<pre><code>blissify bullhead
881</code></pre>
882<p>But what is <code>blissify</code>? It is a compact form of these commands:</p>
Eric Parkc9931992019-07-29 13:10:53 +0900883<pre><code>breakfast bullhead
Eric Park608ce5a2019-08-07 21:27:46 +0800884lunch bliss_bullhead-userdebug
885make blissify
Eric Parkc9931992019-07-29 13:10:53 +0900886</code></pre>
Eric Park608ce5a2019-08-07 21:27:46 +0800887<p>Sounds great, right? Once you have run the command, jump over to the next section.</p>
Eric Parkc9931992019-07-29 13:10:53 +0900888<h3 id="after-building">After building</h3>
889<p>There are two outcomes to a build - either it fails and you get a red error message from <code>make</code>, or it succeeds and you see the Bliss logo in ASCII. If you encounter the former, you need to go back and fix whatever it's complaining about. Typically, 90% of the time the problem will be in your device tree. For the other 10%, submit a bug report to the ROM developers. Be sure to include the full log of your build to help diagnose the problem, and your device tree.</p>
890<p>If you face the latter, congratulations! You've successfully built BlissRoms for your device. Grab the artifacts for your device:</p>
891<pre><code>cd out/target/product/bullhead/
892</code></pre>
Eric Park608ce5a2019-08-07 21:27:46 +0800893<p>In here, you’ll find a <code>.zip</code> that goes along the lines of <code>Bliss-v11.9-Stable-bullhead-UNOFFICIAL-20190531.zip</code>. Install TWRP, flash the build to your device, and enjoy!</p>
Eric Parkc9931992019-07-29 13:10:53 +0900894<h3 id="troubleshooting">Troubleshooting</h3>
895<p>If your build failed, there are a couple things you can try.</p>
896<ul>
897<li>Try a fresh <code>repo sync</code> to make your repository up to date. Sometimes, the Internet connection between you and GitHub can be flaky. In rare cases a commit merge might be ongoing, and you might've grabbed an incomplete merge. Mostly, this should fix the issue 70% of the time.</li>
898<li>Make sure your dependencies are installed correctly. Error messages help out a lot here! Often it will say <code>shared/linked library not found</code> or something along those lines.</li>
899<li>Make sure you sourced <code>build/envsetup.sh</code>. This is especially common and worth suspecting if none of the build commands like <code>breakfast</code> and <code>lunch</code> work. If you have <code>repo sync</code>ed do this again.</li>
900<li>Make sure you’re at the root of the build tree. Again, to quickly jump there, use <code>croot</code>.</li>
901<li>Make sure you ran <code>breakfast</code> correctly and it did not error out. Missing device files will prevent successful builds.</li>
Eric Parkf1180122019-12-28 17:11:20 +0900902<li>Make sure your computer meets minimum requirements to compile AOSP. Chances are, you need more memory/CPU power to complete a build.</li>
903<li>Make sure your computer isn't faulty. This is unlikely, but to check, use a stress-test program like Prime95.</li>
Eric Parkc9931992019-07-29 13:10:53 +0900904</ul>
Eric Parkf1180122019-12-28 17:11:20 +0900905<p>If something goes wrong and you've tried everything above, first use Google to look up your error! Most of the errors you encounter is due to misconfiguration and wrong commands entered. More often than not, Google will have the answer you are looking for. If you're still stuck and nothing fixes the problem, then ask us via <a href="https://t.me/Team_Bliss_Build_Support">our Telegram Build Support chat.</a> (Please only ask issues about BlissRoms, not other custom ROMs as we are unable to assist with those!)</p>
Eric Parkc9931992019-07-29 13:10:53 +0900906<h3 id="conclusion">Conclusion</h3>
907<p>Building a ROM is very hard and tedious and the results are very rewarding! If you managed to follow along, congratulations!</p>
908<p>After you finish building, you can try out the Git Started guide. Make changes, commit, and send them off to our Gerrit for review! Or better yet, download experimental commits not ready for the mainline repositories and review them! Again, ROM building is a fun project you can work with. I hope this guide was a lot of fun to run through!</p>
909<p>-- Eric Park (ideaman924)</p>
910<h3 id="looking-for-the-next-tutorial">Looking for the next tutorial?</h3>
911<p>Check out <a href="../build-tips/">some tips to optimize your build experience.</a></p>
912
Eric Parkc9931992019-07-29 13:10:53 +0900913
914
915
916
917
918
919 </article>
920 </div>
921 </div>
922 </main>
923
924
925<footer class="md-footer">
926
927 <div class="md-footer-nav">
Eric Park8fd7bfb2020-10-02 19:05:33 +0900928 <nav class="md-footer-nav__inner md-grid" aria-label="Footer">
Eric Parkc9931992019-07-29 13:10:53 +0900929
Eric Park8fd7bfb2020-10-02 19:05:33 +0900930 <a href="../" title="Index" class="md-footer-nav__link md-footer-nav__link--prev" rel="prev">
931 <div class="md-footer-nav__button md-icon">
932 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg>
Eric Parkc9931992019-07-29 13:10:53 +0900933 </div>
Eric Park8fd7bfb2020-10-02 19:05:33 +0900934 <div class="md-footer-nav__title">
935 <div class="md-ellipsis">
Eric Parkc9931992019-07-29 13:10:53 +0900936 <span class="md-footer-nav__direction">
937 Previous
938 </span>
939 Index
Eric Park8fd7bfb2020-10-02 19:05:33 +0900940 </div>
Eric Parkc9931992019-07-29 13:10:53 +0900941 </div>
942 </a>
943
944
Eric Park8fd7bfb2020-10-02 19:05:33 +0900945 <a href="../build-tips/" title="Build Tips" class="md-footer-nav__link md-footer-nav__link--next" rel="next">
946 <div class="md-footer-nav__title">
947 <div class="md-ellipsis">
Eric Parkc9931992019-07-29 13:10:53 +0900948 <span class="md-footer-nav__direction">
949 Next
950 </span>
951 Build Tips
Eric Park8fd7bfb2020-10-02 19:05:33 +0900952 </div>
Eric Parkc9931992019-07-29 13:10:53 +0900953 </div>
Eric Park8fd7bfb2020-10-02 19:05:33 +0900954 <div class="md-footer-nav__button md-icon">
955 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4z"/></svg>
Eric Parkc9931992019-07-29 13:10:53 +0900956 </div>
957 </a>
958
959 </nav>
960 </div>
961
962 <div class="md-footer-meta md-typeset">
963 <div class="md-footer-meta__inner md-grid">
964 <div class="md-footer-copyright">
965
Eric Park8fd7bfb2020-10-02 19:05:33 +0900966 Made with
967 <a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
968 Material for MkDocs
969 </a>
Eric Parkc9931992019-07-29 13:10:53 +0900970 </div>
971
972 </div>
973 </div>
974</footer>
975
976 </div>
977
Eric Park8fd7bfb2020-10-02 19:05:33 +0900978 <script src="../../assets/javascripts/vendor.77e55a48.min.js"></script>
979 <script src="../../assets/javascripts/bundle.aa3f9871.min.js"></script><script id="__lang" type="application/json">{"clipboard.copy": "Copy to clipboard", "clipboard.copied": "Copied to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.result.placeholder": "Type to start searching", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.term.missing": "Missing"}</script>
Eric Parkc9931992019-07-29 13:10:53 +0900980
Eric Park8fd7bfb2020-10-02 19:05:33 +0900981 <script>
982 app = initialize({
983 base: "../..",
984 features: [],
985 search: Object.assign({
986 worker: "../../assets/javascripts/worker/search.4ac00218.min.js"
987 }, typeof search !== "undefined" && search)
988 })
989 </script>
Eric Parkc9931992019-07-29 13:10:53 +0900990
991
992 </body>
993</html>