Gradle 进阶学习

module gradle

Gradle版本

Gradle 目录下 - wrapper - gradle-wrapper.properties

Plugin version / Gradle version
2.1.3 - 2.2.3 2.14.1+
2.3.0+ 3.3+
3.0.0+ 4.1+
3.1.0+ 4.4+

Gradle 分类

apply plugin: 'com.android.application'
apply plugin: 'com.android.library'

//使用了 com.android.application 插件 ,该插件用于编译 Android 应用。
apply plugin: ‘com.android.application’

//com.android.library,该插件用于编译Android lib
apply plugin:‘com.android.library’

描述了 gradle所引入的插件

Gradle 脚本执行顺序

gradle的解析顺序:rootproject 的setting.gradle,然后是rootproject的build.gradle,然后是各个subproject。所以project下的build.gradle会先于app下的build.gradle。

Android

  • compileSdkVersion 26 //告诉 Gradle 用哪个 Android SDK 版本编译你的应用

  • 它纯粹只是在编译的时候使用

    buildscript和allprojects的作用和区别
    allprojects声明的却是你所有module所需要使用的资源

repositories
顾名思义就是仓库的意思啦,而jcenter()、maven()和google()就是托管第三方插件的平台

dependencies
当然配置了仓库还不够,我们还需要在dependencies{}里面的配置里,把需要配置的依赖用classpath配置上,因为这个dependencies在buildscript{}里面,

  1. 首先第一句compile fileTree(include: [’.jar’], dir: ‘libs’)*,这样配置之后本地libs文件夹下的扩展名为jar的都会被依赖,非常方便。
    如果你要引入某个本地module的话,那么需要用compile project(‘×××’)。

如果要引入网上仓库里面的依赖,我们需要这样写compile group:‘com.squareup.okhttp3’,name:‘okhttp’,version:‘3.0.1’,当然这样是最完整的版本,缩写就把group、name、version去掉,然后以":"分割即可。
compile ‘com.squareup.okhttp3:okhttp:3.0.1’

/*
gradle 3.0中依赖implementation、api的区别:
其实api跟以前的compile没什么区别,将compile全部改成api是不会错的;
而implementation指令依赖是不会传递的,也就是说当前引用的第三方库仅限于本module内使用,其他module需要重新添加依赖才能用,下面用两个图说明:
*/

ndk

如果项目引用的so库不全,只有某个库那么需要做如下修改,引入指定的库

        ndk {
            abiFilters "armeabi-v7a", "x86"
        }

jar

makeJar

打包Jar 可以通过from指定要打包的目录文件就是.class文件

####注意

一定要依赖于build 否则打出来的jar包就是空的
在过滤打包字节码文件时,被删除的文件可以被其他类引用,但不要被调用或初始化,否者就会报错

release Jar

/**在终端手动调用的时候才会执行 ./gradlew releaseJar*/
task releaseJar << {
    println('***创建jar包***')
}

BuildJar

task buildJar(type: Jar, dependsOn: ['build']) {
    //指定生成的jar名
    baseName 'JCSDK'
    //从哪里打包class文件
    from('build/intermediates/classes/release/com/juphoon/cloud/')
    //打包到jar后的目录结构
    into('com/juphoon/cloud/')
    //去掉不需要打包的目录和文件
    exclude('BuildConfig.class', 'R.class', 'R$*.class')
}

CopyJar

// 运行该task将JCSDK.jar放到TestCloud的libs中
task copyJar(type: Copy, dependsOn: ['buildJar']) {
    from('build/libs/')
    into('../sdk/cloud/')
}

重复的项目依赖

(11 sloc)  783 Bytes
//
//当你的程序需要引用两个及以上的module library或者其他的jar包是出现错误类型如下
//Error:Execution failed for task ':app:transformResourcesWithMergeJavaResForDebug'.
//        > com.android.build.api.transform.TransformException: com.android.builder.packaging.DuplicateFileException: Duplicate files copied in APK org/apache/log4j/xml/log4j.dtd
//File1: /Users/minyuchun/androidwork/projectstudio/StarFaceFrame/app/build/intermediates/exploded-aar/StarFaceFrame/facelibrary/unspecified/jars/classes.jar
//File2: /Users/minyuchun/androidwork/projectstudio/StarFaceFrame/app/build/intermediates/exploded-aar/StarFaceFrame/rylibrary/unspecified/jars/classes.jar
android{


    packagingOptions{
        exclude 'org/apache/log4j/xml/log4j.dtd'
    }

}

groovy 基础语法

  1. ; 可选
  2. 返回值return 可以不写
  3. () 可选 参数直接写
  4. == 相当于.equal() 没有空指针异常
  5. 数组list []
  6. 字符串 ‘’ " ${}" 里面可以添加变量 ‘’’ ‘’'字符串可进行换行
  7. assert 断言 相当于if
  8. def 相当于 var
  9. [] arraylist
  10. << ‘’ 向数组中追加元素
  11. [‘ant’=20 ,‘maven’=200 ] link hash map
  12. 闭包

你可能感兴趣的:(Android,应用层开发)