1 <html devsite><head> 2 <title> Jack </title> 3 <meta name="project_path" value="/_project.yaml"/> 4 <meta name="book_path" value="/_book.yaml"/> 5 </head> 6 <body> 7 <!-- 8 Copyright 2017 The Android Open Source Project 9 10 Licensed under the Apache License, Version 2.0 (the "License"); 11 you may not use this file except in compliance with the License. 12 You may obtain a copy of the License at 13 14 http://www.apache.org/licenses/LICENSE-2.0 15 16 Unless required by applicable law or agreed to in writing, software 17 distributed under the License is distributed on an "AS IS" BASIS, 18 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 19 See the License for the specific language governing permissions and 20 limitations under the License. 21 --> 22 23 <h2 id="the_jack_toolchain">Jack </h2> 24 25 <p class="warning"> 26 <a href="https://android-developers.googleblog.com/2017/03/future-of-java-8-language-feature.html"></a><b>Jack </b><a href="https://developer.android.com/preview/j8-jack.html"> Java 8 </a> 27 </p> 28 29 <p>Jack Android Java Android dex javacProGuardjarjar dx Android </p> 30 31 <p>Jack </p> 32 33 <ul> 34 <li> <strong></strong><br /> 35 AOSP 36 </li><li> <strong></strong><br /> 37 38 Jack dex Jack 39 </li><li> <strong> dex </strong><br /> 40 ProGuard 41 </li></ul> 42 43 <p class="note"> Android 7.0 (N) Jack JaCoCo <a href="https://android.googlesource.com/platform/prebuilts/sdk/+/master/tools/README-jack-code-coverage.md"> JaCoCo </a> <a href="https://developer.android.com/preview/j8-jack.html">Java 8 </a></p> 44 45 <img src="/images/jack-overview.png" height="75%" width="75%" alt="Jack "/> 46 <p class="img-caption"><strong> 1. </strong>Jack </p> 47 48 <h2 id="the_jack_library_format">.jack </h2> 49 50 <p>Jack .jack dex (dex )</p> 51 52 <img src="/images/jack-library-file.png" height="75%" width="75%" alt="Jack "/> 53 <p class="img-caption"><strong> 2. </strong>Jack </p> 54 55 <h2 id="jill">Jill</h2> 56 57 <p>Jill .jar </p> 58 59 <img src="/images/jill.png" alt=" Jill .jar "/> 60 <p class="img-caption"><strong> 3. </strong> .jar </p> 61 62 <h2 id="using_jack_in_your_android_build"> Jack Android </h2> 63 64 <div class="note"> Android 7.0 (N) Jack <a href="https://android.googlesource.com/platform/prebuilts/sdk/+/master/tools/README-jack-server.md">Jack </a> Android 6.0 (M)</div> 65 66 <p> Jack Makefile Jack M Android </p> 67 68 <p> Jack Jack </p> 69 70 <ul> 71 <li> Jack JRE JVM Jack Jack JIT 72 </li><li> Jack 73 </li></ul> 74 75 <p>Jack localhost TCP <code> $HOME/.jack</code> </p> 76 77 <h3 id="$home_jack_file">$HOME/.jack </h3> 78 79 <p><code>$HOME/.jack</code> Jack bash </p> 80 81 <p></p> 82 83 <ul> 84 <li> <strong><code>SERVER=true</code></strong><code> </code> Jack 85 </li><li> <strong><code>SERVER_PORT_SERVICE=8072</code> 86 </strong> TCP 87 </li><li> <strong><code>SERVER_PORT_ADMIN=8073</code></strong> 88 TCP 89 </li><li> <strong><code>SERVER_COUNT=1</code></strong> 90 91 </li><li> <strong><code>SERVER_NB_COMPILE=4</code></strong> 92 93 </li><li> <strong><code>SERVER_TIMEOUT=60</code></strong> 94 95 </li><li> <strong><code>SERVER_LOG=${SERVER_LOG:=$SERVER_DIR/jack-$SERVER_PORT_SERVICE.log}</code></strong> 96 97 </li><li> <strong><code>JACK_VM_COMMAND=${JACK_VM_COMMAND:=java}</code></strong> 98 JVM 99 </li></ul> 100 101 <h3 id="jack_troubleshooting">Jack </h3> 102 103 <p><strong> Jack Out of memory error</strong></p> 104 105 <p><code> $HOME/.jack</code> <code> SERVER_NB_COMPILE</code> Jack </p> 106 107 <p><strong>Cannot launch background server</strong></p> 108 109 <p> TCP <code>$HOME/.jack </code><code>SERVER_PORT_SERVICE</code> <code>SERVER_PORT_ADMIN</code> </p> 110 111 <p> Jack Jack <code>$HOME/.jack</code> <code>SERVER</code> false jack <code>make</code> <code>-l</code> <code>make -j</code></p> 112 113 <p><strong></strong></p> 114 115 <p></p> 116 117 <ul> 118 <li> 119 </li><li> 120 </li><li> <code>jack-admin server-stat</code> 121 </li><li><code>$HOME/.jack</code> 122 </li><li><ul> 123 <li> <code>jack-admin list-server</code> Jack 124 </li><li> <code>kill -3</code> 125 </li><li> Jack 126 </li></ul> 127 </li><li> <code>ls -lR $TMPDIR/jack-$USER.</code> 128 </li><li> <code>ps j -U $USER.</code> 129 </li></ul> 130 131 <p> Jack <code>jack-admin kill-server</code><code>/tmp</code> <code>$TMPDIR</code> <code>jack-$USER</code> </p> 132 133 <p><strong></strong></p> 134 135 <p> <a href="http://b.android.com">http://b.android.com</a> <a href="https://code.google.com/p/android/issues/entry?template=Jack%20bug%20report">Jack </a> <a href="https://code.google.com/p/android/issues/entry?template=Jack%20feature%20request">Jack </a> Jack </p> 136 <table> 137 <tbody><tr> 138 <td><strong> Jack </strong> 139 <ul> 140 <li> dist Make Jack <code>$ANDROID_BUILD_TOP/out/dist/logs/jack-server.log</code> 141 </li><li> <code>jack-admin server-log</code> 142 </li></ul> 143 </td> 144 </tr> 145 </tbody></table> 146 147 <p> Jack </p> 148 149 <pre class="prettyprint"> 150 $ export ANDROID_JACK_EXTRA_ARGS="--verbose debug --sanity-checks on -D 151 sched.runner=single-threaded" 152 </pre> 153 154 <p> Makefile </p> 155 156 <p></p> 157 158 <pre class="prettyprint"> 159 $ unset ANDROID_JACK_EXTRA_ARGS 160 </pre> 161 162 <h3 id="jack_limitations">Jack </h3> 163 164 <ul> 165 <li>Jack SERVER_NB_COMPILE $HOME/.jack SERVER=false Jack 166 </li><li> vm-tests-tf CTS 167 </li><li> JaCoCo 168 </li></ul> 169 170 <h2 id="using_jack_features"> Jack </h2> 171 172 <p>Jack Java 1.7</p> 173 174 <h3 id="predexing">dex </h3> 175 176 <p> Jack .dex dex .jack Jack dex </p> 177 178 <p> dex </p> 179 180 <img src="/images/pre-dex.png" height="75%" width="75%" alt=" dex Jack "/> 181 <p class="img-caption"><strong> 4. </strong> dex Jack </p> 182 183 <h4 id="limitations"></h4> 184 185 <p>// Jack dex </p> 186 187 <h3 id="incremental_compilation"></h3> 188 189 <p></p> 190 191 <h4 id="limitations"></h4> 192 193 <p> multi-dex 194 195 Benny: multi-dex legacy</p> 196 197 <h4 id="enabling_incremental_builds"></h4> 198 199 <p> Android.mk </p> 200 201 <pre class="prettyprint"> 202 LOCAL_JACK_ENABLED := incremental 203 </pre> 204 205 <p class="note"><strong></strong> Jack <code>mma</code> </p> 206 207 <h3 id="shrinking_and_obfuscation"></h3> 208 209 <p>Jack proguard </p> 210 211 <h4 id="supported_common_options"></h4> 212 213 <p></p> 214 215 <ul> 216 <li> <code>@</code> 217 </li><li> <code>-include</code> 218 </li><li> <code>-basedirectory</code> 219 </li><li> <code>-injars</code> 220 </li><li> <code>-outjars // only 1 output jar supported</code> 221 </li><li> <code>-libraryjars</code> 222 </li><li> <code>-keep</code> 223 </li><li> <code>-keepclassmembers</code> 224 </li><li> <code>-keepclasseswithmembers</code> 225 </li><li> <code>-keepnames</code> 226 </li><li> <code>-keepclassmembernames</code> 227 </li><li> <code>-keepclasseswithmembernames</code> 228 </li><li> <code>-printseeds</code> 229 </li></ul> 230 231 <h4 id="supported_shrinking_options"></h4> 232 233 <p></p> 234 235 <ul> 236 <li> <code>-dontshrink</code> 237 </li></ul> 238 239 <h4 id="supported_obfuscation_options"></h4> 240 241 <p></p> 242 243 <ul> 244 <li> <code>-dontobfuscate</code> 245 </li><li> <code>-printmapping</code> 246 </li><li> <code>-applymapping</code> 247 </li><li> <code>-obfuscationdictionary</code> 248 </li><li> <code>-classobfuscationdictionary</code> 249 </li><li> <code>-packageobfuscationdictionary</code> 250 </li><li> <code>-useuniqueclassmembernames</code> 251 </li><li> <code>-dontusemixedcaseclassnames</code> 252 </li><li> <code>-keeppackagenames</code> 253 </li><li> <code>-flattenpackagehierarchy</code> 254 </li><li> <code>-repackageclasses</code> 255 </li><li> <code>-keepattributes</code> 256 </li><li> <code>-adaptclassstrings</code> 257 </li></ul> 258 259 <h4 id="ignored_options"></h4> 260 261 <p></p> 262 263 <ul> 264 <li> <code>-dontoptimize // Jack does not optimize</code> 265 </li><li> <code>-dontpreverify // Jack does not preverify</code> 266 </li><li> <code>-skipnonpubliclibraryclasses</code> 267 </li><li> <code>-dontskipnonpubliclibraryclasses</code> 268 </li><li> <code>-dontskipnonpubliclibraryclassmembers</code> 269 </li><li> <code>-keepdirectories</code> 270 </li><li> <code>-target</code> 271 </li><li> <code>-forceprocessing</code> 272 </li><li> <code>-printusage</code> 273 </li><li> <code>-whyareyoukeeping</code> 274 </li><li> <code>-optimizations</code> 275 </li><li> <code>-optimizationpasses</code> 276 </li><li> <code>-assumenosideeffects</code> 277 </li><li> <code>-allowaccessmodification</code> 278 </li><li> <code>-mergeinterfacesaggressively</code> 279 </li><li> <code>-overloadaggressively</code> 280 </li><li> <code>-microedition</code> 281 </li><li> <code>-verbose</code> 282 </li><li> <code>-dontnote</code> 283 </li><li> <code>-dontwarn</code> 284 </li><li> <code>-ignorewarnings</code> 285 </li><li> <code>-printconfiguration</code> 286 </li><li> <code>-dump</code> 287 </li></ul> 288 289 <p class="note"><strong></strong></p> 290 291 <h3 id="repackaging"></h3> 292 293 <p>Jack jarjar </p> 294 295 <p class="note"><strong></strong>Jack rulezapkeepzapkeep</p> 296 297 <h3 id="multidex_support"> dex </h3> 298 299 <p> dex 65K 65K dex dex<a href="http://developer.android.com/tools/building/multidex.html"> 65K </a></p> 300 301 <p>Jack dex dex</p> 302 303 </body></html>