Android接入指南
SDK集成步骤
- 1、到 https://ossunion.baidu.com/opensource/home/setting.html 注册宿主信息,并下载配置文件union-cfg.json
- 2、将配置文件union-cfg.json放到宿主的assets/config/下,无此路径新建即可。
- 3、local-maven仓库整个复制到项目的根目录(local-maven仓库内部存放pyramid和swan需要的所有lib库,但是这些lib不会全部打包进宿主APP中,所以不用关心这个文件夹的体积问题,直接将生成SDK的local-maven文件夹复制到宿主工程即可)。
4、添加依赖
工程根目录build.gradle
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29buildscript {
repositories {
// 配置目前私有库所在的位置
maven { url uri("${rootDir}/local-maven") }
}
dependencies {
// kotlin
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.2.20"
// 编译注入,仅仅在application中使用(apply plugin: 'com.baidu.pyramid.di')
classpath "com.baidu.pyramid:di-gradle-plugin:0.8.71"
// scheme收集器,每个有描述表的module需要使用(宿主主要关心extension所在的module需要apply plugin: 'com.baidu.pyramid.generate-scheme-class')
classpath "com.baidu.pyramid:generate-scheme-class:0.8.71"
// scheme汇总,仅仅在application中使用(apply plugin: 'com.baidu.pyramid.scheme-classify')
classpath "com.baidu.pyramid:scheme-classify:0.8.71"
}
}
allprojects {
repositories {
// 配置目前私有库所在的位置
maven { url uri("${rootDir}/local-maven") }
}
}实现小程序sdk接口的工程的build.gradle需要依赖以下模块
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26dependencies {
// 必要依赖, TARGET_BUILD_VERSION 就是sdk的版本号
// 1.小程序与核心层
implementation "com.baidu.swan:swan-core:${TARGET_BUILD_VERSION}"
// 2.小程序接口层
implementation "com.baidu.swan:swan-facade:${TARGET_BUILD_VERSION}"
// ********************* 以下需要宿主自己根据需要配置 **************************//
// 默认实现,二选一或者宿主自己实现
// 1. t7、v8内核 可以选择集成,也可以选择so后下载
// 1.1 如果需要依赖精简版(无T7内核,只有v8引擎的)使用com.baidu.swan:swan-sailor-so-lite:
// 1.2 如果希望进行so后下载,则不需要依赖任何so,直接删除此依赖即可,然后再SailorSoDownloadImpl中配置so后下载(后下载参考下文的so后下载章节)
implementation "com.baidu.swan:swan-sailor-so:${TARGET_BUILD_VERSION}"
// 2. 定位和地图组件,可以选择精简版(只有定位能力),和完整版(也具有地图组件)
// 2.1 如果考虑体积问题希望不想引入地图组件,可以使用精简版com.baidu.swan:bd-map-only-location:
implementation "com.baidu.swan:bd-map-full:${TARGET_BUILD_VERSION}"
// 3. 视频组件的实现
// 3.1 如果希望自己实现播放器,则删除此库,按照此库中的代码修改和引入成自己的播放器即可
implementation "com.baidu.swan:bd-videoplayer-impl:${TARGET_BUILD_VERSION}"
// 4. 集成百度cuid体系
implementation "com.baidu.swan:swan-cuid-impl:${TARGET_BUILD_VERSION}"
}app工程的build.gralde(即application工程)中添加以下依赖(需要在apply plugin: ‘com.android.application’之后添加)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19apply plugin: 'com.baidu.pyramid.di'
apply plugin: 'com.baidu.pyramid.scheme-classify'
// 配置依赖注入插件
pyramidConfig {
// 是否打开依赖注入
enable true
// 是否打开依赖注入插件的debug开关
debug false
// 是否应用增量编译模式
enableIncremental false
}
// 配置端能力描述表插件,不需要修改
schemeClassifyConfig {
// 端能力所属框架
schemeClassifyList = ['base', 'swan/v8', 'swan/webview', 'empty', 'swan/v8_ab', 'swan/webview_ab']
}
5、初始化,在Application中
1 |
|
- 6、Manifest配置
1 | <application> |
- 7、混淆文件(必须添加混淆文件,否则release包无法正常工作)
1 | -keep public interface com.baidu.browser.core.INoProGuard |
8、需要实现的接口
- ISwanAppScanCode : 二维码扫码能力
- ISwanAppPayment :支付能力,包括百度支付、微信支付、支付宝支付
- ISwanAppSocialShare : 分享能力,即将小程序分享给好友的能力
9、可以根据业务实现的接口
- IHostExtensionAdapter : 私有扩展能力,用于开发自己的私有能力
- ISwanAppChooseInvoice : 选择发票,目前联盟账号未收录发票,需要宿主自己实现
- AbsSwanAppNightMode : 夜间模式,小程序自带夜间模式能力,如果需要和宿主打通,需要实现此抽象类
- ISailorSoDownloadAdapter : 如果需要采用T7和V8的so后下载来减少体积,则需要实现此接口
- ISwanAppPkgLoadStatus : 小程序包打开失败时的回调,宿主可以进行截获
10、账号,SDK默认采用联盟账号实现,宿主如要使用自己的账号体系,需要自己搭建一套Server体系,并且需要实现ISwanAppAccount 和 AbsSwanAppConfig全部接口
- 11、视频组件,提供了百度播放内核默认实现,如若宿主希望用自己的播放器实现,则可以参考提供的默认实现的代码,实现ISwanAppVideoPlayer、ISwanAppLive和IInlineVideo接口。
- 12、地图组件和定位能力,默认采用百度地图的定位SDK实现,提供了2种默认实现,一个是包含地图组件和定位能力的实现,一种是仅仅包含定位能力,不包含地图组件的实现(不包含地图组件,会让使用到地图组件的小程序无法正常运行),宿主根据体积和运行的小程序自行选择(包含地图组件和定位能力:bd-map-full;仅仅包含定位能力:bd-map-only-location)
- 13、小程序、小游戏默认使用到的V8和T7内核是放到lib-swan-webview/lib-swan-sailor-so(lib-swan-webview/lib-swan-sailor-so-lite仅包含v8,不包含T7的so)中的,宿主可也选择依赖然后打包到自己的apk中;也可选择SO后下载,如果希望进行so后下载,则在上述第四步添加依赖时,不需要依赖上述的任何lib(即,不需要依赖lib-swan-webview/lib-swan-sailor-so或lib-swan-webview/lib-swan-sailor-so-lite),直接删除此依赖即可,然后再SailorSoDownloadImpl中配置so后下载。
- 14、其他各种接口,默认已经提供了实现,不需要宿主关心,如果宿主希望定制,则可以使用自己的实现,具体的接口在com.baidu.swan.apps.ioc.interfaces 和 com.baidu.swan.apps.adaptation.interfaces 包下。
- 15、打开小程序的入口:SwanAppLaunchHelper.launch(scheme)
- scheme为要打开的小程序或小游戏的scheme协议.
- 小程序:宿主的schemeHead://swan/appKey,appKey就是要打开小程序的唯一标识字符串,比如小程序中心的是”sc9Tq1iKawTnj5GhG6i77vzeIt4Crt5u”,每个小程序的appkey可以从宿主平台查询,具体的可以参见小程序调启方式。
- 小游戏:宿主的schemeHead://swangame/appKey,appKey就是要打开小游戏的唯一标识字符串,比如“转一转”的是“duG5QNDKyzwIn2RUGObsiwql4vU6wEwU”,每个小游戏的appkey可以从宿主平台查询。
- 查询链接 :https://ossunion.baidu.com/opensource/home/appmanagement.html
so后 下载说明
- 1、关于T7内核的说明:
- T7内核是百度自研的高性能浏览内核,对于提高小程序的性能具有明显的效果,同时也可以屏蔽低版本系统webview的兼容性问题。
- 同层渲染能力(如视频、input、textarea等组件)强烈依赖T7内核,如果没有T7内核会自动退化为普通的H5元素,功能和性能上会不及同层渲染。
- 一些提升性能的策略,比如SetData能力,也是强烈依赖T7内核,如果没有T7内核也会降级成普通的js端能力调用java代码实现,性能上会有一定的损失。
- 如不是态注重体积问题,建议使用T7内核以提高性能和体验。
- 2、首先在依赖里,去除对”com.baidu.swan:swan-sailor-so:${TARGET_BUILD_VERSION}”或”com.baidu.swan:swan-sailor-so-lite:${TARGET_BUILD_VERSION}”的依赖。
3、实现一个so后下载的类,继承于“DefaultSailorSoDownloadAdapter”如下:
1
2
3
4
5
6
7
8@Service
public class SailorSoDownloadImpl extends DefaultSailorSoDownloadAdapter {
@Override
public boolean isNeedDownload() {
// so 后下载返回 true;直接依赖so则返回false
return true;
}
}可参考demo工程的/aiapps/demo/src/main/java/com/baidu/swan/impl/so/SailorSoDownloadImpl.java
7、so后下载的时机是在第一次打开小程序的时候才进行,由于so的体积较大(18M),会导致第一次打开的时间较长,如果希望在打开之前合适的时机主动触发预下载,可以使用
1
2
3// 1.此方法只可以在主进程中调用,子进程调用无效
// 2.此方法线程安全,也是非阻塞调用,不耗时
SailorSoDownloadConfig.downloadSoSilent()
注意事项
- 1、建议使用联盟账号,SDK内已经提供默认实现,如若使用自己的账号,则需要自己实现一套Server体系和授权过程,比较复杂。
- 2、建议在进入小程序之前申请获取imei的权限,广告相关业务需要获取,否则可能会造成广告统计不准
- 3、SDK中一部分代码采用Kotlin编写,所以需要工程引入Kotlin环境。
- 4、需要实现的接口,都提供了参考实现,都在aiapps/demo/src/main/java/com/baidu/swan/impl/这个包下。
- 5、protobuf的版本,小程序分支默认3.0版本,如果不兼容需要重新输出SDK。
- 6、android Q版本以后对于应用访问权限进一步收紧,访问图片相册等路径需要在manifest文件添加android:requestLegacyExternalStorage=”true”
- 7、2.19.0之后版本的联盟登陆需要重新申请union-cfg.json配置文件,否则可能会出现无法登陆的情况
