本节是基于前面两节来讲,如果没有看的话建议先看上面的基础知识,有个整体了解以后本章理解起来会更容易。 第一节的链接: 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 { 有了上面代码我们同步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 { 有productFlavors下own和vores两个变量后,我们就可以通过重组新的变量来引用其他库 3、重组规则, 先看下面代码 ownCompile project(path: ':carddesk_module', configuration: 'ownRelease') ownCompile(name: 'financial_center_own', 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 { |
|