Android studio gradle中分渠道加载res、libraries及Class

前段时间遇到这样的需求,在App里使用了地图功能,对应海外版使用Android内置google的地图服务。而对于国内版(大家都知道的),我们使用了高德地图。而在导入高德地图的时候需要加入对应的sdk及.so文件,这样最后打包的大小会增加2M左右。但海外版并不需要这部分资源,故需要根据不同的渠道加载不同的jar、res、及不同的类,有助于保持代码的干净,控制包的大小。

不多说了,直接上步骤!

1)首先要获创建不同的productFlavors,便于分渠道打包和调试;

productFlavors {
    // Define separate dev and prod product flavors.
    dev {
        minSdkVersion 21
       ...
    }
    Chinese_dev {
        minSdkVersion 21
       ...
    }

2)要获取当前Flavor(),用于选择相应的资源:

def getCurrentFlavor() {
    Gradle gradle = getGradle()
    String taskStr = gradle.getStartParameter().getTaskRequests().toString()
    println("taskStr:" + taskStr)
    println()
    Pattern pattern;
    if (taskStr.contains("assemble")) {
        pattern = Pattern.compile("assemble(\\w+)(Release|Debug)")
    } else {
        pattern = Pattern.compile("generate(\\w+)(Release|Debug)")
    }
    Matcher matcher = pattern.matcher(taskStr)
    if (matcher.find()) {
        returnmatcher.group(1);
    }
    return ""
}

3)判断是否是自己需要的Flavor,并选择libs的路径(这里需要创建不同名字的libs包,如这里可以把高德的相关jar放入cn_libs目录下):

def buildLibs() {
    String currentFlavor = getCurrentFlavor()
    println("current Flavor:" + currentFlavor)
    booleanisChinese = "Chinese_dev".equalsIgnoreCase(currentFlavor))
    println("--- is Chinese ---" + isChinese)
    if (isChinese) {
        return'cn_libs'
    }
    return 'libs'
}

4)在dependencies中加载时调用buildLibs方法来取出要加载的资源包:

dependencies {
    compile fileTree(dir: buildLibs(), include: ['*.jar’]

5)为了完整的让不同的资源分开,还需要把AndroidManifest.xml及resource文件都分开。在main目录的同级目录下可创建两个单独的目录,如分别是cn及en,并放入对应的代码及资源。
对于AndroidManifest.xml,关键资源使用 tools:node=“merge”:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          xmlns:tools="http://schemas.android.com/tools">

    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" tools:node="merge"/>
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" tools:node="merge"/>

    <application
        tools:node="merge">

        <meta-data
            android:name="com.amap.api.v2.apikey"
            android:value="key"/>

        <service android:name="com.amap.api.location.APSService"/>

    </application>

</manifest>

2.对于代码class的替换,若要根据flavor来切换代码,则需要不同的flavor的java包,并在其下创建下创建相同的类名,并且在main下不能再有该类,则在打包时只打对应的class文件,其他的则丢弃。如:
| Flavor A
| ——-> com.fan.util
| ————> class A
| main
| ——>com.fan.util
| ————>不能再有class A
| Flavor B
| ——>com.fan.util
| ————->class A

创建好后的目录大概长这样:

目录

3.在gradle文件中配置java.srcDirs,AndroidManifest.xml及resource的位置:

sourceSets {
    main {
        jniLibs.srcDirs = ['libs']
        java.srcDirs = ['src/main/java']
        res.srcDirs = ['src/main/res']
    }
    dev {
        java.srcDirs = ['src/us/java/']
    }
    Chinese_dev {
        jniLibs.srcDirs = ['libs-zh']
        manifest.srcFile 'src/cn/AndroidManifest.xml'
        java.srcDirs = ['src/cn/java/']
        res.srcDirs = ['src/cn/res']
    }
}

然后就可以通过Build Variants愉快的玩耍了!!!

博客地址:Android studio gradle中分渠道加载res、libraries及Class

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,324评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,356评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,328评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,147评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,160评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,115评论 1 296
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,025评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,867评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,307评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,528评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,688评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,409评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,001评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,657评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,811评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,685评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,573评论 2 353

推荐阅读更多精彩内容