Android插件化开发学习-Small

android small 插件化学习

1 集成部分:https://github.com/wequick/Small

1.1 添加依赖jar
app/build.gradle

apply plugin: 'com.android.application'

android {
    compileSdkVersion 24
    buildToolsVersion '25.0.0'
    defaultConfig {
        applicationId "com.small.smallstudy"
        minSdkVersion 15
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }
    signingConfigs {
        release {
            storeFile file('C:\\Users\\Administrator\\Desktop\\APK签名\\android.keystore')
            storePassword "12345678901234567890"
            keyAlias "android.keystore"
            keyPassword "12345678901234567890"
        }
    }
    buildTypes {
        release {
            signingConfig signingConfigs.release
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:24.0.0'
    compile 'com.android.support:design:24.0.0'
}

1.2 bulid.gradle//加入small工具

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.3.0'
        classpath 'net.wequick.tools.build:gradle-small:1.3.0-beta5'
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

apply plugin: 'net.wequick.small'
small {
    aarVersion = '1.1.0-alpha2'
}

1.3 创建模块

File->New->Module来创建插件模块,需要满足:

模块名形如:app.*, lib.*或者web.*
包名包含:.app., .lib.或者.web.

为什么要这样?因为Small会根据包名对插件进行归类,特殊的域名空间如:“.app.” 会让这变得容易。

对lib.*模块选择Android Library,其他模块选择Phone & Tablet Module。

创建一个插件模块,比如app.main:

1.4 配置路由路径

右键app模块->New->Folder->Assets Folder,新建assets目录,

右键assets目录->New->File,新建bundles.json文件,加入:

{
  "version": "1.0.0",
  "bundles": [
    {
      "uri": "main",
      "pkg": "com.small.appmain",
      "rules": {
        "sub": "Sub"
      }
    }
  ]
}

2 编译配置部分:
Build libraries (准备基础库)

[./]gradlew buildLib -q (-q是安静模式,可以让输出更好看,也可以不加)

Step 4. Build bundles (打包所有组件)

[./]gradlew buildBundle -q (-q是安静模式,可以让输出更好看,也可以不加)

2 路由跳转传参实现
路由:
Small.openUri(“main”, MainActivity.this);//指定当前插件的唯一ID,比如 main。Android pkg 插件下的 LauncherActivity
Small.openUri(“main/Sub”, MainActivity.this);//路由跳转,Android pkg.SubActivity

传参:
使用 Query标准 来传递参数,即在 uri 之后加上 ? 再带上键值对,多个键值对用 & 来分开。

如 "detail?id=1000&title=test"。

在接收方取值的方法为:

Android:

// app.detail/MainActivity
Uri uri = Small.getUri(this);
if (uri != null) {
    String id = uri.getQueryParameter("id");
    // Do stuff by `id'
}

3 热更新更新实现

由于small机制是将插件打包成so放置在宿主,所以热更新只需打包新的so,按需求修改bundles.json(并不是传统意义上的class替换获取方法替换)
此处可使用差分,合并so的机制,实现增量更新。
{
“manifest”: {
“bundles”: [
{
“uri”: “main”,
“pkg”: “com.small.appmain”,
“rules”: {
“sub”: “Sub”
}
}
],
“version”: “1.0.0”
},
“updates”: [
{
“pkg”: “small.cn.app.change”,
“url”: “http://192.168.19.125:8080/json/libchange.so“//修改so
}
]
}
//使用新so替换旧so,app应用重启生效

猜你喜欢

转载自blog.csdn.net/qq_27688259/article/details/78950494