分享

Android一套代码打不同的包工程配置详解_下-gradle配置高级使用

 杰出天下 2018-10-11
本节是基于前面两节来讲,如果没有看的话建议先看上面的基础知识,有个整体了解以后本章理解起来会更容易。
第一节的链接:   http://www.360doc.com/showweb/0/0/793594973.aspx
第二节的链接:   http://www.360doc.com/showweb/0/0/793628861.aspx
前面第二节讲过,一套代码可以根据变量配置打多个包,但是依据第二节的做法虽然打了多个包,但是多个包的代码都是一样的,只是里面配置不一样, 如果有一个功能只有在A工程中有,在B工程中没有,这样的做法明显B里面有了多余的代码,这样B包会变大,有没有办法我写的代码只给A不给B, 某个功能只给某一个工程使用? 还有工程中依赖了很多library,无论是aar还是代码依赖的library我们能不能配置A工程依赖哪几个库,B工程依赖另外几个库,只要四个变量(第二节中有解释)一选,立刻就能提取出来A工程,包括A工程依赖的包, 切换到B工程B工程就会依赖它自己的包,跟A工程不影响,当然有, 请往下看:
一、针对某个工程写代码
1、回忆一下以前的配置:
productFlavors {
own {
applicationId "com.proj.config.projectconfig"
manifestPlaceholders = [
umeng_app_key: "这是own工程使用的key"
]
}

vores {
applicationId "com.proj.vores.projectconfig"
manifestPlaceholders = [
umeng_app_key: "这是vores工程使用的key"
]
}
}
 有了上面代码我们同步gradle以后左下角会产生四个变量:
 
 这时候我们在src上面点击右键:依次选择New/Folder/ ,下面会出现红框部分
 

红框中我们先选择Java Folder,会出现让你选择给某个应用创建文件夹:

own和vores就是我们productFlavors里面的变量, 我们选择own, 然后再重复上面的步骤,选择vores, 两个文件夹都创建起来: 
上图中own是我们自己的工程, 它里面是我们自己工程独有的功能,vores是另外一个工程, 如果vores中独有的功能就写在这个文件夹下,不限于Java文件,同样支持string.xml,图片等跟外面main里面的结构一样, 都支持,此处我没有建res等文件夹,大家可以自己创建试试,main里面是两个应用都有的功能。
比如要修改应用程序的名字:
可以在vores和own底下创建和main一样的Java、资源文件夹, 因为vores的app名字肯定和我们的应用不一样, 所以要重新设置名称。当左下角变量选择了voresRelease它就启用了。 虽然vores和own在不同的文件夹中, 但是无论在哪里都可以访问到里面的代码, 就像在同一个文件夹下一样。

二、根据配置不同的工程加载不同的库
1、首先我们看看一般的引用:
compile 'com.alibaba:fastjson:1.1.54.android'    // 在线引用
compile fileTree(include: ['*.jar'], dir: 'libs')   // 引用工程中所有libs目录下的jar文件
compile files('libs/AMap_Location_V2.4.1_20160414.jar') // 依赖单个jar文件
compile(name:'lib_common', ext:'aar') // 依赖aar文件
compile(':lib_module')    // 引用一个module库工程
2、必须有以下配置:
productFlavors {
own {
applicationId "com.proj.config.projectconfig"
}

vores {
applicationId "com.proj.vores.projectconfig"
}
}
有productFlavors下own和vores两个变量后,我们就可以通过重组新的变量来引用其他库
3、重组规则, 先看下面代码
ownCompile project(path: ':carddesk_module', configuration: 'ownRelease')
voresCompile project(path: ':task_center', configuration: 'voresRelease')
ownCompile(name: 'financial_center_own', ext: 'aar')
voresCompile(name: 'contract_vores', ext: 'aar')
重组规则是productFlavors下的变量名+Compile:
own+Compile, vores+Compile,这样就组成了ownCompile和voresCompile两个新的关键字, 上面有"carddesk_module"、"task_center"两个library和"financial_center"、"contract_vores"两个aar,总共四个库,当选择左下角的变量切换工程以后,own工程只依赖"carddesk_module"和"financial_center",vores工程只依赖"task_center"和"contract_vores",这样就不会出现同一个工程一次依赖四个库的情况, 注意:在依赖aar时候,一定要在aar名字后面加"_own"和"_vores”,否则aar依赖不到。
引用library的时候,后面一个参数configuation参数表示库的编译方式是release或者debug,他的取值就是配置productFlavors以后生成的四个变量:voresDebug、voresRelease、ownDebug、ownRelease。
4、声明组合变量
到此为止,运行代码以后会发现报错,ownCompile和voresCompile找不到,需要我们在android {}下方进行声明才可以:
android {

}

configurations {
ownCompile
voresCompile
}

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多