Android 集成说明

1. 导入 SDK

1.1 下载 SDK 并配置 maven 源

由于目前处于公测阶段,因此 SDK 需要通过本地 maven 源的方式引入。首先前往此处下载最新的 SDK 文件,将获取到的 aar 包和 pom 文件放置在工程的 app/libs 目录下,完整的目录结构如下所示:

app
└── libs 
    └── com
        └── tencent
            └── luggage
                └── wxa-standalone-open-runtime-SaaA-sdk
                   └── 0.4.5
                       ├── wxa-standalone-open-runtime-SaaA-sdk-0.4.5.aar
                       └── wxa-standalone-open-runtime-SaaA-sdk-0.4.5.pom

在工程的 build.gradle 添加本地和远程 maven 仓库地址:

maven {
    url "https://mirrors.tencent.com/repository/maven/wechat-releases/"
}
maven {
    url "file://${rootProject.file("app/libs")}"
}

工程的 build.gradle 完整配置示例如下:

buildscript {
    ext {
        buildToolsVersion = "29.0.2"
        minSdkVersion = 21
        compileSdkVersion = 29
        targetSdkVersion = 29
        javaVersion = JavaVersion.VERSION_1_7
        kotlin_version = '1.3.72'
    }

    repositories {
        mavenLocal()
        google()
        mavenCentral()
    }

    dependencies {
        classpath "com.android.tools.build:gradle:4.1.3"
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}

subprojects {
    repositories {
        mavenLocal()
        google()
        mavenCentral()
        maven {
            url "https://mirrors.tencent.com/repository/maven/wechat-releases/"
        }
        maven {
            url "file://${rootProject.file("app/libs")}"
        }
    }
}

1.2 声明依赖 SDK

在模块 build.gradle 的 dependencies 中添加对 SDK 的依赖,具体可以查看拓展 SDK 具体使用说明

implementation("com.tencent.luggage:wxa-standalone-open-runtime-SaaA-sdk:x.y.z")

1.3 声明 kotlin 构建插件依赖

SDK 内部使用了 kotlin 标准库及协程库,为避免出现库实现不一致导致的 crash (异常例子open in new window),建议接入方使用的 kotlin 版本对齐小应用 SDK 使用的版本 1.3.71

需正确引入 kotlin 插件,否则会导致启动小应用模块异常。

apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'

1.4 Java 8 语言功能支持

Android SDK 于 0.5.0 版本开始升级使用支持的 Java 8 语言功能,因此需要更新模块的 build.gradle 文件,如下所示针对使用(在源代码中使用或通过依赖项使用)Java 8 语言功能的每个模块,

    // 配置 sourceCompatibility 和 targetCompatibility 兼容 JAVA8  语法
    compileOptions {
        sourceCompatibility = 1.8
        targetCompatibility = 1.8
    }

1.5 完整的配置

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'

android {
    useLibrary 'org.apache.http.legacy'

    compileSdkVersion rootProject.ext.compileSdkVersion
    buildToolsVersion rootProject.ext.buildToolsVersion

    defaultConfig {
        multiDexEnabled true
        versionName "0.1"
        versionCode 100
        minSdkVersion rootProject.ext.minSdkVersion
        targetSdkVersion rootProject.ext.targetSdkVersion
        ndk {
            abiFilters "arm64-v8a", "armeabi-v7a"
        }
    }

    buildTypes {
        debug {
            debuggable true
            signingConfig signingConfigs.debug
            minifyEnabled false
            shrinkResources false
        }
        release {
            debuggable false
            signingConfig signingConfigs.release
            minifyEnabled true
            shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

    compileOptions {
        sourceCompatibility = 1.8
        targetCompatibility = 1.8
    }

    packagingOptions {
        exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/NOTICE'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/NOTICE.txt'
    }

    flavorDimensions 'abi'
    productFlavors {
        arm {
            dimension 'abi'
            ndk {
                abiFilter "armeabi-v7a"
            }
        }

        arm64 {
            dimension 'abi'
            ndk {
                abiFilter "arm64-v8a"
            }
        }
    }
    lintOptions {
        checkReleaseBuilds false
        abortOnError false
    }
}

def wxa_sdk_version = 'x.x.x'

dependencies {
    implementation("com.tencent.luggage:wxa-standalone-open-runtime-SaaA-sdk:${wxa_sdk_version}")
}

2. SDK 初始化

在使用 SDK 前需要进行一次初始化传入必要配置信息。由于多端应用框架使用多进程架构,需要在主进程和小程序进程中均进行初始化,建议接入方在Application#attachBaseContext() 或 Application#onCreate() 方法里创建 SaaAApi 实例。

调用示例如下:

import com.tencent.luggage.wxa.SaaA.api.SaaAApi
import com.tencent.luggage.wxa.SaaA.api.SaaAApiConfig

class DemoApplication : Application() {
    override fun attachBaseContext(base: Context?) {
        super.attachBaseContext(base)

        SaaAApi.Factory.createApi(this,
            SaaAApiConfig().apply {
                codePath = mapOf(
                    "小应用模块 ID" to miniModulePath  // miniModulePath是相对于资源(assets)目录的路径,比如SaaA_embed/wxfa0d2b4a0a0d38dc
                )
                sdkKey = "SDK Key"
                sdkKeySecret = "SDK Key Secret"
                enableDebug = true // 是否开启 vConsole,默认关闭
                setOpenTransition(0, 0) // 小程序进入动画,用法与 overridePendingTransition 一致
                setCloseTransition(0, 0) // 小程序退出动画
            }

        )
    }
}

其中 sdkKey 和 sdkKeySecret 为后台请求作证,必须填写,可以登录微信开发平台open in new window获取到。

codePath 用于指定小应用模块与本地小程序代码包的对应关系,支持启动多个小应用模块。小程序资源包由开发者工具生成,放置在资源(assets)目录下。

3. SDK 使用示例

经过上述初始化后,你可以调用以下代码获取接口实例,完整的接口列表可以点此查看。

val saaAApi = SaaAApi.Factory.getApi()

3.1 启动小应用模块

目前只支持加载本地的小应用模块包资源,在 activity 相应生命周期先获取 SaaAApi 实例后,传入启动的小应用模块所需的启动路径和对应的 miniModuleId。

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import com.tencent.luggage.wxa.SaaA.api.SaaAApi
import com.tencent.luggage.wxaapi.LaunchWxaAppResult
import com.tencent.luggage.wxa.SaaA.api.LaunchAppModuleResultListener

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        SaaAApi.Factory.getApi().launchAppModule(this, "{{miniModuleId}}", "",
            // 可配置监听
            LaunchAppModuleResultListener {  miniModuleId, timestamp, result ->
                android.util.Log.e("LaunchAppModuleResult", "$result")
                if (result == LaunchWxaAppResult.OK) {
                    runOnUiThread {
                        finish()
                    }
                }
        })
        runOnUiThread {
            finish()
        }
    }
}

4. 使用扩展 SDK

扩展 SDK 与多端应用框架 SDK 使用方法一致,首先将 aar 包和 pom 放置在相同目录下,完整目录结构如下: 查看更多拓展 SDK

app
└── libs 
    └── com
        └── tencent
            └── luggage
                ├── wxa-standalone-open-runtime-SaaA-sdk
                │   └── 0.4.5
                │       ├── wxa-standalone-open-runtime-SaaA-sdk-0.4.5.aar
                │       └── wxa-standalone-open-runtime-SaaA-sdk-0.4.5.pom
                ├── wxa-standalone-open-runtime-SaaA-sdk-bluetooth
                │   └── 0.4.5
                │       ├── wxa-standalone-open-runtime-SaaA-sdk-bluetooth-0.4.5.aar
                │       └── wxa-standalone-open-runtime-SaaA-sdk-bluetooth-0.4.5.pom
                └── wxa-standalone-open-runtime-SaaA-sdk-network
                    └── 0.4.5
                        ├── wxa-standalone-open-runtime-SaaA-sdk-network-0.4.5.aar
                        └── wxa-standalone-open-runtime-SaaA-sdk-network-0.4.5.pom
                

之后在 gradle 中依赖对应的 SDK 库即可:

implementation("com.tencent.luggage:wxa-standalone-open-runtime-SaaA-sdk-bluetooth:x.y.z")
implementation("com.tencent.luggage:wxa-standalone-open-runtime-SaaA-sdk-network:x.y.z")