Android多渠道SDK开发心得(5)——多渠道sdk的调试

一.多渠道sdk的验证

1.新增库验证

新建http库工程,仅包含如下一个类NetManager.java
http/src/main/java/com.tobenull.http.NetManager.java

package com.tobenull.http;

import android.util.Log;

/**
 * Created by tobenull on 11/27/17.
 */

public class NetManager {
   
    private static NetManager instance = new NetManager();
    private NetManager(){}
    public static NetManager getInstance() {
        return instance;
    }

    public void init() {
        Log.d("null-tobe", "NetManager->init");
    }
}

修改各个库之间的依赖关系,如下

sdk->base->http

sdk/build.gradle

...
android {
    ...
}
dependencies {
    if (rootProject.ext.debug) {
        compile project(':base')
    } else {
        embedded project(':base')
        embedded project(':http')
    }
    ...
}

base/build.gradle

...
dependencies {
    ...
    compile project(':http')
}

在命令窗口输入以下命令

gradle clean main

解压sdk/build/outputs/aar目录下的sdk-alibaba-release.aar和sdk-baidu-release.aar并反编译其classes.jar,均如下:

v com.tobenull
    v base
        > BaseManager.class
        > BuildConfig.class
        > TLog.class
    v http
        > BuildConfig.class
        > NetManager.class
    v sdk
        > BaseSDK.class
        > BuildConfig.class
        > SDK.class

  而且两个渠道的SDK.class中内容分别为alibaba和baidu两个渠道的源码。

  经过以上的步骤,我们只是新增了一个http库并添加了依赖配置,并没有修改合并脚本相关的任何代码,最终构建得到了符合预期的sdk(将新增的http库也合并进来),由此可见,我们的合并脚本是没问题的。

2.新增渠道验证

修改sdk/build.gradle脚本,新增”tencent”渠道,如下
sdk/build.gradle

...
android {
    ...
    productFlavors {
        baidu{}
        alibaba{}
        tencent{}
    }
    ...
}
...

在命令窗口执行gradle clean main命令后,展开sdk/outputs/aar/目录

    v sdk
        v build
            ...
            v outputs
                v aar
                    ...
                    sdk-alibaba-debug.aar
                    sdk-alibaba-release.aar
                    sdk-baidu-debug.aar
                    sdk-baidu-release.aar
                    sdk-tencent-debug.aar
                    sdk-tencent-release.aar
            ...

解压sdk-tencent-release.aar包并反编译其中的classes.jar,如下

v com.tobenull
    v base
        > BaseManager.class
        > BuildConfig.class
        > TLog.class
    v http
        > BuildConfig.class
        > NetManager.class
    v sdk
        > BaseSDK.class
        > BuildConfig.class

  因为我们没有在sdk库中新建tencent的渠道,所以打出来的sdk中只有main的内容,如果有兴趣,可以试着仿照baidu或alibaba渠道新建tencent渠道并实现SDK类供第三方调用。

  经过上述步骤,我们在没有修改打版脚本的情况下只是新建了一个tencent渠道,执行构建命令就成功地生成了tencent渠道的aar包,说明我们的合并脚本是没有问题的。

二.多渠道sdk的调试

  经过前面的文章,我们已经完成了sdk多渠道开发与构建的工作,sdk的调试我们会在app工程中也以多渠道的方式进行。设置{rootProject}/build.gradle中的debug为true、采用正常的库工程依赖方式,当调试没问题时上传代码,服务端设置debug为false进行sdk的多渠道构建。
  在将{rootProject}/build.gradle中的debug设为true后,同步后会发现App.java中会报SDK找不到的提示,这是因为我们app工程只是依赖于sdk,没有设置对各个渠道的分别依赖,而SDK.java在sdk库的main中又不存在,需要对多个渠道进行单独依赖,如下:
app/build.gradle

dependencies {
    if (rootProject.ext.debug) {
//        compile project(':sdk')
        baiduCompile project(path: ':sdk', configuration: 'baiduRelease')
        alibabaCompile project(path: ':sdk', configuration: 'alibabaRelease')
        tencentCompile project(path: ':sdk', configuration: 'tencentRelease')
    } else {
        ...
    }
    ...
}

  在com.android.tools.build:gradle 3.0.0以前的版本,依赖默认使用的都是Compile,而多渠道中可以针对特定的渠道设置特定的依赖,如此处的baiduCompile等。
  由于sdk中有多个不同的渠道,所以在进行依赖时需要指定configuration,这样当我们切换app工程中的渠道时、其依赖的sdk也会自动切换到对应的渠道上来。

此时如果报以下错:

Error:Project :app declares a dependency from configuration 'alibabaCompile' to configuration 'alibabaRelease' which is not declared in the descriptor for project :sdk.

需要确保sdk库中配置多渠道的位置设置publishNonDefault为true
sdk/build.gradle

android {
    ...
    publishNonDefault true
    productFlavors {
        ...
    }
    ...
}

  同步成功后,我们就可以针对不同的渠道通过app工程的调用对各渠道sdk进行调试了。
  打开android studio的Build Variants窗口,默认显示如下:

        module        |        Build Variant
    app               |    alibabaDebug
    base              |    debug
    http              |    debug
    sdk               |    alibabaRlease

  运行app,打开日志过滤”null-“,demo运行日志如下:

12-16 14:46:14
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值