糖果派对官方网站_可以赌钱的糖果游戏_手机版
InstantRun原理(1)——开头化逻辑

InstantRun原理(1)——开头化逻辑

作者:网络编程    来源:未知    发布时间:2020-03-01 01:35    浏览量:

先上地址:

bb电子糖果派对, 

Android Studio 2.0上马援救 Instant Run 性情, 使得在支付进度中能急速将代码变化更新到器材上。在此之前,更新代码之后须求先编写翻译一个安然还是的新Apk,卸载设备桐月设置的这几个Apk (若有),再 push 到设备安装,再开发银行。有了 Instant Run 天性之后,只必要 push 一些增量到道具上,间接试行,可认为开采人士节省大批量岁月。当然 Instant Run 特征只在 debug 时有效,对公布 release 版未有别的影响。

 

对于InstantRun不打听的同桌能够去查看官方文书档案

异步加载图片的工具,能够加载本地,网络,drawable等

1、开源地址  

Instant Run 通过 hot swap, warm swap, code swap 二种 swap 来促成。Android Studio 会依据代码的更换机关决定 push 哪一类 swap 到设备上,并基于不一致的 swap 试行不一的一坐一起。

第一下下载jar包

     https://github.com/wyouflf/xUtils3.git   

代码改变内容 Instant Run 行为
修改一个实例方法或者一个静态方法的实现 hot swap: 这是最快的情况,下次调用该方法时直接使用更新后的方法
修改或者删除一个资源 warm swap: App 保护运行状态,但是会自动重启 activity, 所以屏幕会闪一下
增加、删除或修改((1)注解 (2)成员变量/静态变量/方法签名)修改类的继承关系、实现的接口修改类的静态代码块利用动态资源ID改变资源顺序 cold swap(Api level >= 21): 需要重启App若Api level < 21, 则需要重新编译整个app
修改 AndroidManifest.xml修改被 AndroidManifest.xml 引用的资源修改 widget UI 需要重新编译整个App

     若是运用eclipse能够 点击这里下载aar文件, 然后用zip解压, 取出jar包和so文件.

2、导入工程 

接下去我们就以二个简易的例证来介绍InstantRun的规律。

bb电子糖果派对 1

    使用Gradle营造时增多一下借助就能够:     

compile 'org.xutils:xutils:3.2.2'

   

1 运行demo

第一我们来创建一个简约的demo,demo很简短,独有一个activity,activity中有一个button:

public class MainActivity extends AppCompatActivity implements View.OnClickListener{
    private Button btn;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        this.btn = (Button) findViewById(R.id.btn);
        this.btn.setOnClickListener(this);
    }


    @Override
    public void onClick(View view) {
        Toast.makeText(this, "click", Toast.LENGTH_SHORT).show();
    }
}

运作该demo,效果非常轻便就不截图了。珍视来看下其apk文件:将包装出来的apk解压后组织如下:

bb电子糖果派对 2

这里写图片描述

先是大家把classes.dex和classes2.dex反编写翻译出来看看(反编写翻译软件推荐使用dex2jar,相关应用方法得以参见:user guide):

  • classes.dex:

    bb电子糖果派对 3

    此地写图片描述

  • classes2.dex

    bb电子糖果派对 4

    此处写图片描述

能够见见,多少个dex文件完全未有蕴涵其余工程代码,看上去全是非亲非故代码。其实那些代码都是instant-run.jar中的代码,相当于说InstantRun工程在进展apk打包的时候将intant-run.jar包打入到了apk中。但难题是,我们的代码(也正是上文中MainActivity)去哪儿了?

其实客商代码都被写入到apk文件中的instant-run.zip中去了,将instant-run.zip解压后能够看来:

bb电子糖果派对 5

此间写图片描述

能够看出在此个路子下还应该有广大dex文件,而大家的代码就被放在slice_9-classes.dex中,至于instant-run.zip中的打包/分包逻辑,为何顾客代码会被打入到 slice_9-classes.dex 中本身还不是太明白,知道的同校能够给自家留言:

bb电子糖果派对 6

此间写图片描述

能够见到,在客商代码的每贰个函数中都被插入了那般一段代码:

    IncrementalChange localIncrementalChange = $change;
    if (localIncrementalChange != null)
    {
      localIncrementalChange.access$dispatch("onClick.(Landroid/view/View;)V", new Object[] { this, paramView });
      return;
    }

上述代码通过推断$change变量来推行分裂的逻辑。那也是InstantRunhot swap的贯彻原理,通过插桩的方法在每叁个函数中植入$change变量及其有关逻辑,当有关代码被改过时,利用反射的主意将$change重新初始化,进而推行改善后的逻辑已达到规定的标准热修复的指标。

其它大家再来看下AndroidManifest.xml文件:

<?xml version="1.0" encoding="utf-8" standalone="no"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.alibaba.sdk.instandemo" platformBuildVersionCode="25" platformBuildVersionName="7.1.1">
    <meta-data android:name="android.support.VERSION" android:value="25.3.1"/>
    <application android:allowBackup="true" android:debuggable="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:name="com.android.tools.fd.runtime.BootstrapApplication" android:supportsRtl="true" android:theme="@style/AppTheme">
        <activity android:name="com.alibaba.sdk.instandemo.MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
    </application>
</manifest>

能够看看,工程中的Application被窜改成了com.android.tools.fd.runtime.BootstrapApplication,这么些类输入intents-run.jar包,轻易猜度,Application的早先化进度也被instant-run所代理了。

看样子这里,五个instant-run功效的大致布局为主就一清二楚了:

  • InstantRun工程实际上是四个宿主工程,客户代码以能源的格局放入到apk中

  • InstantRun工程通过com.android.tools.fd.runtime.BootstrapApplication代理app的早先化进程,推断在开端化的进度中,com.android.tools.fd.runtime.BootstrapApplication会去加载用户代码

  • InstantRun在编写翻译代码时会通过插桩的办法给每四个函数植入一段代码,从而在须求时hook

将jar包拷贝到libs中

 使用Eclipse创设时操作步骤如下:

 1、下载aar文件并选用然后用zip解压, 抽取jar包和so文件.
       bb电子糖果派对 7bb电子糖果派对 8

  2、将xutils-3.2.0.jar 以至armeabi添加到工程的libs中就可以。

3、简介

    XUtils3一共有4大坚守:注网店模特块,网络模块,图片加载模块,数据库模块。 

2 工程架构

友情链接: 网站地图
Copyright © 2015-2019 http://www.tk-web.com. bb电子糖果派对有限公司 版权所有