From 37cc54ebf160aa4a39c853498c072aac25fdeff7 Mon Sep 17 00:00:00 2001 From: Adarsh Fernando Date: Wed, 23 Mar 2016 10:59:10 -0700 Subject: [PATCH] Docs: Added Instant Run feature overview section - Added notes in other docs related to IR compatibility - Changed 65K Dex Limit -> 64K Dex Limit Bug:24709303 Bug:27571202 Bug:27794423 Bug:26230674 Change-Id: I16f530df6169602261c6b0a049de9c53e8819c9b --- docs/html/images/tools/as-cleanrerun.png | Bin 0 -> 1042 bytes docs/html/images/tools/as-restart.png | Bin 518 -> 583 bytes docs/html/images/tools/as-stop.png | Bin 0 -> 400 bytes .../images/tools/instant-run/as-irdebug.png | Bin 0 -> 815 bytes .../images/tools/instant-run/as-irrun.png | Bin 0 -> 744 bytes .../instant-run/update-project-dialog.png | Bin 0 -> 32510 bytes docs/html/tools/building/building-studio.jd | 575 +++++++++++++++++- docs/html/tools/building/multidex.jd | 84 ++- docs/html/tools/performance/index.jd | 11 + docs/html/tools/tools_toc.cs | 2 +- 10 files changed, 630 insertions(+), 42 deletions(-) create mode 100644 docs/html/images/tools/as-cleanrerun.png create mode 100644 docs/html/images/tools/as-stop.png create mode 100644 docs/html/images/tools/instant-run/as-irdebug.png create mode 100644 docs/html/images/tools/instant-run/as-irrun.png create mode 100644 docs/html/images/tools/instant-run/update-project-dialog.png diff --git a/docs/html/images/tools/as-cleanrerun.png b/docs/html/images/tools/as-cleanrerun.png new file mode 100644 index 0000000000000000000000000000000000000000..7d57b0f9060198f68ed7b3bfa2de9ff18de6d474 GIT binary patch literal 1042 zcmV+t1nv8YP)P000>X1^@s6#OZ}&00006VoOIv0RI60 z0RN!9r;`8x010qNS#tmY3ljhU3ljkVnw%H_000McNliru-~$*D1_r7?e|7)>1D{Dm zK~zY`-IhyF8&?>HpEEa)2gbw*FkshCA$CYY1a&IY3aN`Kk-F(Be<1&$U9sq@KcvdO zSthG0s@f)~DWOV5P$fcK1TMkg3l|S#>>1CTE_zY9hN@~8`F7``^M3F9e&;(!)M_=! ze;f+`L%ca4+Icq$pd$ksEe9b4v51YTs31Wi{~d@xAcQ~@Dt;&6@y1h@>P6m7Oi~z{ zAQrJv5QI{m3U(%lDilH~alIz3PMc<@$%a>BcK0Xd>x<03n&VdH111KpVreD_adM)k zm9VC$?6vlp+jz!z>rYs7UeOLcRNF*$X|%l-O~=LX1Y`Ewd^~!K!tgujigrFGs!*x8 zb?z>H$%D18F)WiV%SO|50z;qzTEwK=h!A={RlmXdewiELbqqy6CYyGW2epH3?*4p_ z`{i#)r7m*4?=qLV-y)(IEH+;9yz!EVFi1uR7$3aE&HneeXbsa2+JsV`%|rm5(C6D< zf8b%|dy<1`Zl^!uW`BW{nZOS_M5I9&!Zmw@8}X}LiH#730Zsn^af&C$m~6N9nBQI` zFg2$8^V}Z#5K}R5J55@lN3J`=wVqKj))1i|Qr)RxL=1FYKVJz;VB2d@_P2=|7Sr)b z3`M6EdH@)TPBxZ7L4YbKuDqaBDv`}*86F-+2!T97u46ae3w>I`M@OMoj}Z_aS`TDE zhX7UAa9x+p%}qL;4yvl6D9VYFX(yGgCKPsBO&VTCH+$a6mepM%Q&r z)5NxI9LJ$ns}YaKv2FV-;|1|Z4}Fn1%e$*QT7Sy>LwWW+_b-r*jSW^-R#;tKB?tn7 zAYgfUnf?8JDwPWPe4bn`cZiX4*b_|lU3}lCTrLxhMky2uB$LTwlBqK@GoSx`LRVET=rPt?TP*Dr`Em6bTf18rssU1B zciAKc5&+ceb)=N^^z@L==Se1$7>4oswj%gFi>1add{Ml|?D`ze-X6NIFwu8~&!#_R z#7gt%$zv?bB9qCmu&_X1UmxS+RVnNsrOd15X2Zvpy2P0a4U{;g8k(fB*mh M07*qoM6N<$f^C$}aR2}S literal 0 HcmV?d00001 diff --git a/docs/html/images/tools/as-restart.png b/docs/html/images/tools/as-restart.png index 12d2923708e7f31c6364876216e8b2b78057b67b..39122c9c3ea7c8f04402d2f047fd372c15c5d3fe 100644 GIT binary patch delta 529 zcmV+s0`C2W1jht3iBL{Q4GJ0x0000DNk~Le0000P0000P2nGNE0L1BqV*mgE24YJ` zL;(K){{a7>y{D6rE*=Wt0~injF?UmSN|9D5f3HbIK~zY`?bXXmlu;PR@$Y-)yz|Ut|A2+9#kAHa>5g#Q ze{>Hx4n}qf-A0g_{A;H}EZbuG>q}-=UlES3kdPK0T}QYCd$Bl)-53=)CEPXIsVPW} z$yAM*#6@9q;=QI2fJ)w@aI;)XR>%f3Bp+_?KBe|6b#=w~!~*z2v!le|n|TPgkIo zDsS1b-!UmN^Zhl7D(Nh`bpQZ(RNI^O2q#6t@ilB!q0U!vs22)_Qf?Lu29KW;TYzbq zfRni}20VT&+vHv3W9E>X{w5s9W_WRgjbB@tL0XG%VB}t9+m3Q?s*kbdDR$yNNB%7$ zh2(MleX8=x*_Jq)fa|(|Oi7$i%lfCRbmuw7Gm@M7j9m|4(Eenr4Dp T^uCPf00000NkvXXu0mjfWOMj; delta 490 zcmV)D1UQF zL_t(Y$76i);spb>0TTlaz^I|a%+Rt!&6nR?CsHvZk?AyGcN)Y0|LWX|(dvPEBAR3x z`uE@8-H#6MeRA}{r^i28{&Mm0F)=g!`u^kRx9=J}im~cJdZIXuX2B}@;peA@ll^zT zKW1fTXXa<;WMO4yV`XAuVrOAtVt->}W#wRC#OG2hhW`2Yr}jkegTF5&MWmzTyp094 z_*i+u&z3PU{8#5v2vv5`=2OA%eJqAjSgqz5~z|f{&NPLpQV(5b(&;PM98VG103$9GU5H z!=Jx@7#RLjGw~~MN&fx!=hTaf)HKvp((3>Jf3vPHfA#eZ)eQBOb5iG(fB)}O@~)E2 zw|9N`@sSFKvM{l<8XxudT{5H12Q0f8z*KdAg5*tM>01E&B07*qoM6N<$f~585761SM diff --git a/docs/html/images/tools/as-stop.png b/docs/html/images/tools/as-stop.png new file mode 100644 index 0000000000000000000000000000000000000000..ed1424ba67137c76a2b62e8368ceae1560adc2d4 GIT binary patch literal 400 zcmV;B0dM|^P)P000>X1^@s6#OZ}&00006VoOIv0RI60 z0RN!9r;`8x010qNS#tmY3ljhU3ljkVnw%H_000McNliru-~$pA2`>g5*;)Vq0Ub$1 zK~zY`?Uk`k!%z%GkCPN=S{9@thDz{rjC>6vKL-+Hmr5wDO6|)KU`kUzBoISAM(@32 z-)qOVTCKz{N5vn+2~rfz;8%&dZK103FNNb>2WB})-OhM^dZc@ONi*8zEqC`1_@>K2 zWX7ahbGduN5&!{Jw?<}pxg;^2&$zf=U(u`)e--8mBm`0On4rZo65m;tULVeYgOnf+#n7r=> literal 0 HcmV?d00001 diff --git a/docs/html/images/tools/instant-run/as-irdebug.png b/docs/html/images/tools/instant-run/as-irdebug.png new file mode 100644 index 0000000000000000000000000000000000000000..0754afac3fb1d37fd392134f5162377273bc8042 GIT binary patch literal 815 zcmV+~1JL}5P)P000>X1^@s6#OZ}&00006VoOIv0RI60 z0RN!9r;`8x010qNS#tmY3ljhU3ljkVnw%H_000McNliru-~$pA2QKfJ#6kc70=!8? zK~zY`?Ul`MR8<(pfA2Zx-kCeY3{yS^hIWFXq=62)pyHcYShP+!WG32M1 zYqyxGFLVBvSsG!VPe*r=)@ht`FL)DWXx_hpbSwBlj&SZOf8M(S+N0p5_;7eTBbh8= z95cD0$e~i1@%#|6bCiNChe~Av?X3a~K!mv000&(gptMg|zenzk1325K7WTMYdB9?~ zLt1NYEX?uw{hzsATf~S^>vy?Qc}P17k%15J48(yl4_^2ZMsseONe^84p7 z+0BRuKdsdH_||pWQAD5(1hw^Qg;p7o=L zpGvpR(X*DB`Z6bHzhS=9!pIXNv zBjk+7)UQ9X&}lQ2@;SC^FJt-jgmIjl9!Z7ilZ3?^BOY46Qc?<<(6^3`6%+LS;002ovPDHLkV1m<}e1-r3 literal 0 HcmV?d00001 diff --git a/docs/html/images/tools/instant-run/as-irrun.png b/docs/html/images/tools/instant-run/as-irrun.png new file mode 100644 index 0000000000000000000000000000000000000000..8b5fafaea2baa4e9ff058a3ffa6b6984471fa5d3 GIT binary patch literal 744 zcmVP)P000>X1^@s6#OZ}&00006VoOIv0RI60 z0RN!9r;`8x010qNS#tmY3ljhU3ljkVnw%H_000McNliru-~$pA2rPyUxuF060(D75 zK~zY`?Ul_-l|dATpPBc4?|aporlw_Sizw2*7DW-Ys7;$zEsKJRpm5VJTLi5lf}lmK zpr~D-e?hhFlRh9Tj3f}s#PX_X-Oo8Q(?XL=T|X!d0)Lxf&cHk~zd7fON~hDF1(xO? zXc4k75Un&7VG^zMJVR74F`yXCeBoyIZHBX>#9=%?5Tz7m?8D>)GB!t7{~bCWUF7xW zw@J?O3Ks&VjVgW zQN3a%*ZR7+@Z>6=GeeVxs<}gS5Hr$!3uFWxgs4edya(ePMg)taX+;YUvu`+h?+lLy zUNBY|C(_aE5EUfI4fPO8nlOry(O$BHFHu2+$6;&{u@(`*h@omp4Z5+4v(GMb<@pWX zkMzw3QFvSA`^Wp_$NP!m6q$Fo$$WZ>(gEIsIEQf-V=YB%DOy2kO{%_@yW>x}-qSgi zjim}pUH8sVy=EVyl7(C^He5=>mLoXHl~I=f literal 0 HcmV?d00001 diff --git a/docs/html/images/tools/instant-run/update-project-dialog.png b/docs/html/images/tools/instant-run/update-project-dialog.png new file mode 100644 index 0000000000000000000000000000000000000000..e106c5798f965f6619853029dc5c415328b131fa GIT binary patch literal 32510 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

In this document

    -
  1. Changing the run configuration
  2. -
  3. Changing build variants
  4. -
  5. Monitoring the build process
  6. -
  7. Generating APKs
  8. +
  9. + Changing the run configuration +
  10. + +
  11. + Changing build variants +
  12. + +
  13. + Monitoring the build process +
  14. + +
  15. + Generating APKs +
  16. + +
  17. + About Instant Run +
      +
    1. + Configuring and optimizing your project for Instant Run +
    2. + +
    3. + Limitations of Instant Run +
    4. +
    +

See also

@@ -31,7 +55,9 @@ parent.link=index.html

By default, Android Studio sets up new projects to deploy to the Emulator or - a physical device with just a few clicks. + a physical device with just a few clicks. With Instant Run, you can push + changes to methods and existing app resources to a running app without + building a new APK, so code changes are visible almost instantly.

@@ -138,8 +164,8 @@ parent.link=index.html

- You can view details about the build process by clicking Gradle - Console Gradle + Console . The console displays each task that Gradle executes in order to build your app, as shown in figure 1.

@@ -160,7 +186,40 @@ parent.link=index.html

If an error occurs during the build process, the Messages window - will appear to describe the issue. + appears to describe the issue. Gradle may recommend some command-line + options to help you resolve the issue, such as --stacktrace or + --debug. To use command-line options with your build process: +

+ +
    +
  1. Open the Settings or Preferences + dialog: +
      +
    • On Windows or Linux, select File > + Settings from the main menu. +
    • + +
    • On Mac OSX, select Android Studio > + Preferences from the main menu. +
    • +
    +
  2. + +
  3. Navigate to Build, Execution, Deployment > + Compiler. +
  4. + +
  5. In the text field next to Command-line Options, enter your + command-line options. +
  6. + +
  7. Click OK to save and exit. +
  8. +
+ +

+ Gradle will apply these command-line options the next time you try building + your app.

@@ -184,4 +243,502 @@ parent.link=index.html

Figure 2. Click the link to locate the generated APK files. -

\ No newline at end of file +

+ +

About Instant Run

+ +

+ Introduced in Android Studio 2.0, Instant Run is a behavior for the + Run and Debug commands that significantly reduces the + time between updates to your app. Instant Run pushes updates to your app + without building a new APK, so changes are visible much more quickly. +

+ +

+ Instant Run is supported only when you deploy the debug build variant, use + Android Plugin for Gradle version 2.0.0 or higher, and set + minSdkVersion to 15 or higher in your app's module-level + build.gradle file. For the best performance, set + minSdkVersion to 21 or higher. +

+ +

+ After deploying an app, a small, yellow thunderbolt icon appears within the + Run button (or Debug + button), indicating that Instant Run is + ready to push updates the next time you click the button. Instead of building + a new APK, it pushes just those new changes and, in some cases, the app + doesn't even need to restart but immediately shows the effect of those code + changes. +

+ +

+ Instant Run pushes updated code and resources to your connected device or + emulator by performing a hot swap, warm swap, or cold + swap. It automatically determines the type of swap to perform based on + the type of change you made. The following table describes how Instant Run + behaves when you push certain code changes to a target device. +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Code Change + + Instant Run Behavior +
+
    +
  • Change implementation code of an existing method +
  • +
+
+

+ Supported with hot swap: This is the + fastest type of swap and makes changes visible much more quickly. Your + application keeps running and a stub method with the new implementation is used + the next time the method is called. +

+ +

+ Hot swaps do not re-initialize objects in your running app. You may need to + restart the current activity, or restart the app, before + you see certain updates. By default, Android Studio automatically restarts the + current activity after performing a hot swap. If you do not want this behavior, + you can disable automatic activity restarts. +

+
+
    +
  • Change or remove an existing resource +
  • +
+
+ Supported with warm swap: This swap + is still very fast, but Instant Run must restart the current activity when it + pushes the changed resources to your app. Your app keeps running, but a small + flicker may appear on the screen as the activity restarts—this is normal. +
+ Structural code changes, such as: +
    +
  • Add, remove, or change: +
      +
    • an annotation +
    • + +
    • an instance field +
    • + +
    • a static field +
    • + +
    • a static method signature +
    • + +
    • an instance method signature +
    • +
    +
  • + +
  • Change which parent class the current class inherits from +
  • + +
  • Change the list of implemented interfaces +
  • + +
  • Change a class's static initializer +
  • + +
  • Reorder layout elements that use dynamic resource IDs +
  • +
+
+

+ Supported with cold swap (API level 21 or higher): This swap + is a bit slower because, although a new APK is not required, Instant Run must + restart the whole app when it pushes structural code changes. +

+ +

+ For target devices running API level 20 or lower, Android Studio + deploys a full APK. +

+
+
    +
  • Change the app manifest +
  • + +
  • Change resources reference by the app manifest +
  • + +
  • Change an Android widget UI element (requires a + Clean and Rerun) +
  • +
+
+

+ When making changes to the app's manifest or resources referenced by the + manifest, Android Studio automatically deploys a new build + in order to apply these changes. This is because certain information about + the app, such as its name, app icon resources, and intent filters, are + determined from the manifest when the APK is installed on the device. +

+ +

+ If your build process automatically updates any part of the app manifest, + such as automatically iterating versionCode or + versionName, you will not be able to benefit from the full + performance of Instant Run. We recommend that you disable automatic updates + to any part in the app manifest in your debug build variants. +

+
+ +

+ Note: If you need to restart your app after a crash, do not + launch it from your target device. Restarting your app from your target + device does not apply any of your code changes since the last cold swap or + incremental build. To launch your app with all your recent changes, + click Run + (or Debug + ) from Android Studio. +

+ +

+ Using Rerun +

+ +

+ When pushing code changes that affect certain initializers, such as changes + to an app's {@link android.app.Application#onCreate onCreate()} method, you + need to restart your app for the changes to take effect. To perform an + incremental build and restart the app, click Rerun + . +

+ +

+ If you need to deploy a clean build, select Run + > Clean and Rerun 'app' from the main menu, or hold down the + Shift key while clicking Rerun . This action stops the running app, + performs a full clean build, and deploys the new APK to your target device. +

+ +

+ Disabling automatic activity restart +

+ +

+ When performing a hot swap, your app keeps running but Android Studio + automatically restarts the current activity. To disable this default setting: +

+ +
    +
  1. Open the Settings or Preferences + dialog: +
      +
    • On Windows or Linux, select File > + Settings from the main menu. +
    • + +
    • On Mac OSX, select Android Studio > + Preferences from the main menu. +
    • +
    +
  2. + +
  3. Navigate to Build, Execution, Deployment > + Instant Run. +
  4. + +
  5. Uncheck the box next to Restart activity on code + changes. +
  6. +
+ +

+ If automatic activity restart is disabled, you can manually restart the current + activity from the menu bar by selecting Run > Restart + Activity. +

+ +

+ Configuring and optimizing your project for Instant Run +

+ +

+ Android Studio enables Instant Run by default for projects built using + Android Plugin for Gradle 2.0.0 and higher. +

+ +

+ To update an existing project with the latest version of the plugin: +

+ +
    +
  1. Open the Settings or Preferences + dialog. +
  2. + +
  3. +

    + Navigate to Build, Execution, Deployment > + Instant Run and click Update Project, + as shown in figure 3. +

    + +

    + If the option to update the project does not appear, it’s already + up-to-date with the latest Android Plugin for Gradle. +

    + + + +

    + Figure 3. Updating the Android Plugin for Gradle for an + existing project. +

    +
  4. +
+ +

+ You also need to change the build variant to + a debug version of your app to start using Instant Run. +

+ +

+ Improve build times by configuring DEX resources +

+ +

+ When you deploy a clean build, Android Studio instruments your app to allow + Instant Run to push code and resource updates. Although updating the running + app happens much more quickly, the first build may take longer to complete. + You can improve the build process by configuring a few DEX options, such as + maxProcessCount and javaMaxHeapSize. +

+ +
+
+ maxProcessCount +
+ +
+ Sets the maximum number of DEX processes that can be started + concurrently. If the Gradle daemon is already running, you need to + stop the process before initializing it with a new maximum process count. + You can terminate the Gradle daemon by calling one of the following from + the Terminal window: +
    +
  • On Windows, call gradlew --stop +
  • + +
  • On Linux/Mac OSX, call ./gradlew --stop +
  • +
+
+ +
+ javaMaxHeapSize +
+ +
+ Sets the maximum memory allocation pool size for the dex operation. When + passing a value, you can append the letter 'k' to indicate kilobytes, 'm' + to indicate megabytes, or 'g' to indicate gigabytes. +
+
+ +

+ The following example sets maxProcessCount to 4 and + javaMaxHeapSize to "2g" in the module-level + build.gradle file: +

+ +
+android {
+  ...
+  dexOptions {
+    maxProcessCount 8
+    javaMaxHeapSize "2g"
+  }
+}
+
+ +

+ You should experiment with these settings by incrementing their values and + observing the effect on your build times. You could experience a negative + impact to performance if you allocate too many resources to the DEX'ing process. +

+ +

+ Excluding your project from Windows Defender +

+ +

+ On Windows systems, Windows Defender may cause slowdowns while using Instant + Run. If you are using Windows Defender, you should + exclude your Android Studio project folder from Windows Defender malware + scans. +

+ +

+ Disabling Crashlytics for your debug build variant +

+ +

+ Using Crashlytics is known to cause slower build times. To improve build + performance while developing your app, you can + disable Crashlytics for your debug build variant. +

+ +

+ Limitations of Instant Run +

+ +

+ Instant Run is designed to speed up the build and deploy process in most + situations. However, there are some aspects to using Instant Run that might + affect its behavior and compatibility with your app. If you experience any + other issues while using Instant Run, please file a bug. +

+ +

+ Deploying to multiple devices +

+ +

+ Instant Run uses different techniques to perform hot, warm, and cold swaps + that are specific to the API level of the target device. For this reason, + while deploying an app to multiple devices at once, Android Studio + temporarily turns off Instant Run. +

+ +

+ Multidexing your app +

+ +

+ If your project is configured for Legacy Multidex—that + is, when build.gradle is configured with multiDexEnabled + true and minSdkVersion 20 or lower—and you deploy to + target devices running Android 4.4 (API level 20) or lower, Android Studio + disables Instant Run. +

+ +

+ If minSdkVersion is set to 21 or higher, Instant Run + automatically configures your app for multidex. Because Instant Run only + works with the debug version of your app, you may need to configure your app for + multidex when deploying your release build variant. +

+ +

+ Running instrumented tests and performance profilers +

+ +

+ Instrumented tests load both the debug APK and a test APK into the same + process on a test device, allowing control methods to override the normal + lifecycle of the app and perform tests. While running or debugging + instrumented tests, Android Studio does not inject the additional methods + required for Instant Run and turns the feature off. +

+ +

+ While profiling an app, you should disable Instant Run. There is a small + performance impact when using Instant Run and a slightly larger impact when + overriding methods with a hot swap. This performance impact could interfere + with information provided by performance profiling tools. Additionally, the + stub methods generated with each hot swap can complicate stack traces. +

+ +

+ Using third-party plugins +

+ +

+ Android Studio temporarily disables the Java Code Coverage Library (JaCoCo) + and ProGuard while using Instant Run. Because Instant Run only works with + debug builds, this does not affect your release build. +

+ +

+ Certain third-party plugins that perform bytecode enhancement may cause + issues with how Instant Run instruments your app. If you experience these + issues, but want to continue using Instant Run, you should disable those + plugins for your debug build variant. You can also help improve compatibility + with third-party plugins by filing a bug. +

+ +

+ Pushing changes to multi-process apps +

+ +

+ Instant Run only instruments your app's main process in order to perform hot + swaps and warm swaps. When pushing code changes to other app processes, such + as changes to a method implementation or an existing resource, Instant Run + performs a cold swap. +

+ +

+ Disabling Instant Run +

+ +

+ To disable Instant Run: +

+ +
    +
  1. Open the Settings or Preferences + dialog. +
  2. + +
  3. Navigate to Build, Execution, Deployment > + Instant Run. +
  4. + +
  5. Uncheck the box next to Enable Instant Run. +
  6. +
\ No newline at end of file diff --git a/docs/html/tools/building/multidex.jd b/docs/html/tools/building/multidex.jd index e441a7c63bd3e..7d05fb93de4a2 100644 --- a/docs/html/tools/building/multidex.jd +++ b/docs/html/tools/building/multidex.jd @@ -1,4 +1,4 @@ -page.title=Building Apps with Over 65K Methods +page.title=Building Apps with Over 64K Methods page.tags="65536","references","max","65k","dex","64k","multidex","multi-dex","methods"

@jd:body @@ -8,14 +8,14 @@ page.tags="65536","references","max","65k","dex","64k","multidex","multi-dex","m

In this document

  1. - About the 65K Reference Limit + About the 64K Reference Limit
    1. Multidex support prior to Android 5.0
    2. Multidex support for Android 5.0 and higher
  2. - Avoiding the 65K Limit
  3. + Avoiding the 64K Limit
  4. Configuring Your App for Multidex with Gradle
      @@ -82,45 +82,71 @@ You may try using --multi-dex option.

      -

      About the 65K Reference Limit

      +

      About the 64K Reference Limit

      - Android application (APK) files contain executable bytecode files in the form of Dalvik Executable (DEX) files, which - contain the compiled code used to run your app. The Dalvik Executable specification limits the - total number of methods that can be referenced within a single DEX file to 65,536, including - Android framework methods, library methods, and methods in your own code. Getting past this limit - requires that you configure your app build process to generate more than one DEX file, known as a - multidex configuration. + Android application (APK) files contain executable bytecode files in the form + of Dalvik + Executable (DEX) files, which contain the compiled code used to run your app. + The Dalvik Executable specification limits the total number of methods that + can be referenced within a single DEX file to 65,536—including Android + framework methods, library methods, and methods in your own code. In the + context of computer science, the term Kilo, K, denotes 1024 (or + 2^10). Because 65,536 is equal to 64 X 1024, this limit is referred to as the + '64K reference limit'.

      +

      + Getting past this limit requires that you configure your app build process to + generate more than one DEX file, known as a multidex configuration. +

      Multidex support prior to Android 5.0

      - Versions of the platform prior to Android 5.0 use the Dalvik runtime for executing app code. By - default, Dalvik limits apps to a single classes.dex bytecode file per APK. In order to get around - this limitation, you can use the - multidex support library, which becomes part of the primary DEX file of your app and then + Versions of the platform prior to Android 5.0 (API level 21) use the Dalvik + runtime for executing app code. By default, Dalvik limits apps to a single + classes.dex bytecode file per APK. In order to get around this limitation, + you can use the multidex support + library, which becomes part of the primary DEX file of your app and then manages access to the additional DEX files and the code they contain.

      +

      + Note: If your project is configured for multidex with + minSdkVersion 20 or lower, and you deploy to target devices + running Android 4.4 (API level 20) or lower, Android Studio disables Instant Run. +

      Multidex support for Android 5.0 and higher

      - Android 5.0 and higher uses a runtime called ART which natively supports loading multiple dex - files from application APK files. ART performs pre-compilation at application install time which - scans for classes(..N).dex files and compiles them into a single .oat file for execution by the - Android device. For more information on the Android 5.0 runtime, see Introducing ART. + Android 5.0 (API level 21) and higher uses a runtime called ART which + natively supports loading multiple dex files from application APK files. ART + performs pre-compilation at application install time which scans for + classes(..N).dex files and compiles them into a single .oat file for + execution by the Android device. For more information on the Android 5.0 + runtime, see Introducing + ART.

      +

      + Note: While using Instant Run, + Android Studio automatically configures your app for multidex when your app's + minSdkVersion is set to 21 or higher. Because Instant Run only + works with the debug version of your app, you still need to configure your + release build for multidex to avoid the 64K limit. +

      -

      Avoiding the 65K Limit

      +

      Avoiding the 64K Limit

      - Before configuring your app to enable use of 65K or more method references, you should take steps + Before configuring your app to enable use of 64K or more method references, you should take steps to reduce the total number of references called by your app code, including methods defined by your app code or included libraries. The following strategies can help you avoid hitting the dex reference limit: @@ -173,8 +199,9 @@ You may try using --multi-dex option.

      - Modify your app Gradle build file configuration to include the support library and enable - multidex output, as shown in the following Gradle build file snippet: + Modify the module-level build.gradle file configuration to + include the support library and enable multidex output, as shown in the + following code snippet:

      @@ -199,13 +226,6 @@ dependencies {
       }
       
      -

      - Note: You can specify the multiDexEnabled setting in the - defaultConfig, buildType, or productFlavor sections of - your Gradle build file. -

      - -

      In your manifest add the {@link android.support.multidex.MultiDexApplication} class from the multidex support library to the application element. @@ -444,7 +464,7 @@ android { dependencies { androidTestCompile('com.android.support:multidex-instrumentation:1.0.1') { exclude group: 'com.android.support', module: 'multidex' - } + } }

      diff --git a/docs/html/tools/performance/index.jd b/docs/html/tools/performance/index.jd index fa5af86bd04e9..299b05e21b32b 100644 --- a/docs/html/tools/performance/index.jd +++ b/docs/html/tools/performance/index.jd @@ -22,6 +22,17 @@ page.article=true visualize the rendering, compute, memory, and battery performance of your app.

      +

      + Note: While profiling an app, you should disable Instant + Run. There is a small performance impact when using Instant + Run and a slightly larger impact when updating methods. This + performance impact could interfere with information provided by performance + profiling tools. Additionally, the stub methods generated while using the + feature can complicate stack traces. +

      +

      Rendering Analysis Tools

      Visualize the rendering behavior and performance of your app.

      diff --git a/docs/html/tools/tools_toc.cs b/docs/html/tools/tools_toc.cs index 9f575d41ed6fb..a630366950484 100644 --- a/docs/html/tools/tools_toc.cs +++ b/docs/html/tools/tools_toc.cs @@ -254,7 +254,7 @@ class="en">Tools Help
    1. Manifest Merging
    2. - Apps Over 65K Methods
    3. + Apps Over 64K Methods