LoginSignup
616
606

More than 5 years have passed since last update.

Androidアプリの開発を爆速化させるInstant Runを今日から使おう

Last updated at Posted at 2015-11-24

TL;DR


Android Studio 2.0 Preview  Instant Run 5 (20 :eyes:)

Instant Run 


Instant Run  Android    Java  Hot Code Replace  Visual Studio  Edit and Continue 

 ( JRebel for Android )

2015/11/22 ()  Android Dev Summit 2015  Android Studio 2.0 :

Android Dev Summitキーノートでの紹介



Android Studio 2.0 

Android Gradle Plugin 2.0 

 ICS (android-14) 









String ()


  Instant Run  

使


 Android Studio  2.0.0  buildToolsVersion 23

1. Android Studio 2.0.0  & 


Android Studio  Canary channel 使

使MAndroid Tools Project Site 


Android Studio 2.0  Instant Run 

1. 


 Minimum SDK Version 15 Blank Activity 

2. &


 Gradle 

Screen Shot 2015-11-24 at 9.09.42 AM.png

incrementalDebugBuildInfoGenerator


Screen Shot 2015-11-24 at 9.10.18 AM.png

generateDebugInstantRunAppInfo

transformClassesWithInstantRunVerifierForDebug

transformClassesWithInstantRunForDebug






Screenshot_20151124-091210.png Screenshot_20151124-091217.png
 FloatingActionButton  Snackbar 

 ClassLoader  adb  Socket  dex ?

Screen Shot 2015-11-24 at 9.10.34 AM.png

3.  (hot swap)


 "Replace with your own action" 
before
fab.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
            .setAction("Action", null).show();
    }
});

これを日本語に書き換えて、ついでにアクションも作ってしまいます。

after
fab.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        Snackbar.make(view, "こんにちはこんにちは!!", Snackbar.LENGTH_LONG)
            .setAction("はい!!", null).show();
    }
});

 (Nexus 6P)  Run    Ctrl-R 

Screen Shot 2015-11-24 at 9.15.44 AM.png
 assembleDebug  incrementalDebugSupportDex 

Screen Shot 2015-11-24 at 9.22.15 AM.png
2

Screen Shot 2015-11-24 at 9.21.49 AM.png
 0.2 

Screenshot_20151124-093420.png
 Toast  Activity  FAB 

Screenshot_20151124-091858.png
2!

4. String (warm swap)


 String 
before
<string name="action_settings">Settings</string>

これを

after
<string name="action_settings">設定だよ</string>



 Ctrl-R  incrementalDebugSupportDex  Toast 

Screen Shot 2015-11-24 at 9.16.07 AM.png
 Activity  Ctrl-Shift-R 

Screen Shot 2015-11-24 at 9.23.51 AM.png


Screenshot_20151124-105543.png
 Activity  warm swap  Activity ()


 buildToolsVersion 

1. 


Preferences  Instant Run 

Screen Shot 2015-11-24 at 9.53.15 AM.png
Update Project  build.gradle 
build.gradle
classpath 'com.android.tools.build:gradle:2.0.0-alpha1'

build.gradle
buildToolsVersion "23.0.0"

gradle.properties
distributionUrl=https\://services.gradle.org/distributions/gradle-2.8-all.zip

 buildToolsVersion 

 build tools  "23.0.2" 

Screen Shot 2015-11-24 at 11.08.30 AM.png
 Instant Run 使

2. 


 Sync project 
Error:Cause: com.android.sdklib.repository.FullRevision

 Jake Wharton  SDK Manager Plugin  Pull Request  Merge  2.0.0-alpha1  jitpack.io 使 master  dependency  Android Studio 


 Preview 


調 FAB  onClickListener 
fab.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        Snackbar.make(view, "こんにちはこんにちは!!", Snackbar.LENGTH_LONG)
            .setAction("はい!!", new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Toast.makeText(MainActivity.this, "やったね!", Toast.LENGTH_SHORT).show();
                }
            });
    }
}

いざ変更を適用して、 FAB をクリックしてみると死にます。

FATAL EXCEPTION: main
Process: sh.nothing.instantrun, PID: 27524
java.lang.NoClassDefFoundError: Failed resolution of: Lsh/nothing/instantrun/MainActivity$1$1;
    at sh.nothing.instantrun.MainActivity$1$override.onClick(MainActivity.java:27)
    at sh.nothing.instantrun.MainActivity$1$override.access$dispatch(MainActivity.java)
    at sh.nothing.instantrun.MainActivity$1.onClick(MainActivity.java:0)
    at android.view.View.performClick(View.java:5198)
    at android.view.View$PerformClick.run(View.java:21147)
    at android.os.Handler.handleCallback(Handler.java:739)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:148)
    at android.app.ActivityThread.main(ActivityThread.java:5417)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
 Caused by: java.lang.ClassNotFoundException: Didn't find class "sh.nothing.instantrun.MainActivity$1$1" on path: DexPathList[[dex file "/data/data/sh.nothing.instantrun/files/studio-fd/dex-temp/classes0x0000.dex"],nativeLibraryDirectories=[/data/data/sh.nothing.instantrun/files/studio-fd/lib, /vendor/lib64, /system/lib64]]
    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:469)
    at sh.nothing.instantrun.MainActivity$1$override.onClick(MainActivity.java:27) 
    at sh.nothing.instantrun.MainActivity$1$override.access$dispatch(MainActivity.java) 
    at sh.nothing.instantrun.MainActivity$1.onClick(MainActivity.java:0) 
    at android.view.View.performClick(View.java:5198) 
    at android.view.View$PerformClick.run(View.java:21147) 
    at android.os.Handler.handleCallback(Handler.java:739) 
    at android.os.Handler.dispatchMessage(Handler.java:95) 
    at android.os.Looper.loop(Looper.java:148) 
    at android.app.ActivityThread.main(ActivityThread.java:5417) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
    Suppressed: java.lang.ClassNotFoundException: Didn't find class "sh.nothing.instantrun.MainActivity$1$1" on path: DexPathList[[zip file "/data/app/sh.nothing.instantrun-1/base.apk"],nativeLibraryDirectories=[/data/app/sh.nothing.instantrun-1/lib/arm64, /vendor/lib64, /system/lib64]]
    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:504)
            ... 13 more
        Suppressed: java.lang.ClassNotFoundException: sh.nothing.instantrun.MainActivity$1$1
    at java.lang.Class.classForName(Native Method)
    at java.lang.BootClassLoader.findClass(ClassLoader.java:781)
    at java.lang.BootClassLoader.loadClass(ClassLoader.java:841)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:504)
                ... 14 more
 Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack trace available


strings.xml  Instant Run 


 app_name 

 Android Studio 

Screen Shot 2015-11-24 at 9.42.11 AM.png
AndroidManifest.xml 5

7 ()


Screen Shot 2015-11-24 at 12.29.01 PM.png
 transformClassesWithDexForDebug 


 Instant Run 


 (assembleDebug)  Android Dev Summit  Android Studio 


We Want Your Feedback! 


minSdkVersion <21  multi-dex 使 65K  dex  dex 

Instant Run 使 Instant Run 

 IDE 

 Gradle  transforms API 使

Data Binding 




 Blank Activity 1


:  3.8 6 = 10

:  1.8  0.2  = 2


5

  

 (3 .java  230 )  ( 1.5 )

2 Web ()使


Run 


 Instant Run  Android Studio  Run  Stop  ( System.exit()  )  Instant Run  & 

 Instant Run  Instant Run  Run  ApplicationManifest.xml  Run  Ctrl-R 

Activity 


Ctrl-Shift-R  Activity  onPause onStop onDestroy  onCreate  savedInstanceState  configuration  onConfigurationChanged 

Activity  Activity 


Instant Run

 Tips () DevOps Advent Calendar 2015  1
616
606
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up

616
606