Home | History | Annotate | Download | only in source
      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>