gradle 的下载 与 使用注意


gradle 版本下载地址    https://services.gradle.org/distributions/

1.0.0 - 1.1.3
2.2.1 - 2.3
1.2.0 - 1.3.1
2.2.1 - 2.9
1.5.0
2.2.1 - 2.13
2.0.0 - 2.1.2
2.10 - 2.13
2.1.3 - 2.2.3
2.14.1+
2.3.0+
3.3+


版本与包的对应关系


一  句话说明 Gradle

Gradle是一种依赖管理工具,基于Groovy语言,面向Java应用为主,它抛弃了基于XML的各种繁琐配置,取而代之的是一种基于Groovy的内部领域特定(DSL)语言。
例:输入 苹果,梨子,香蕉。  输出 水果沙拉。  这就是构建的含义。叫做——make或者build 


1: 灵活的语言构建规则 ——构建的方式:利用一个基于java的语言——Groovy。 一门把java语言写的像脚本一样简单的语言。

Groovy把我们写完的语言编译为 javaclass 然后启动 虚拟机执行。 

2: Gradle是一种DSL  :—— 它的特别的一种语言。



二  Groovy介绍

Groovy是一种动态语言,
Groovy扩展了Java语言。
具有像Python, Ruby 和 Smalltalk 语言特性的灵活动态语言

一:
变量定义可以使用关键字def,
定义变量的时候可以不指定其类型,
函数定义时也可以不指定。
返回值也可以不指定类型,最后一行就是返回值

二 
作为动态语言,Groovy世界中的所有事物都是对象
java中的基本数据类型 ,在Groovy中都是 包装类。
Groovy中的容器类很简单,就三种:
 List:链表,
Map:键-值表,
Range:范围,它其实是List的一种拓展。

三 闭包


三 Gradle  是设么

Gradle只是运用到Groovy的一小部分基础。
Gradle是一个工具,同时它也是一个编程框架。

一 何是编程框架
每一个待编译的工程都叫一个Project。每一个Project在构建的时候都包含一系列的Task
gradle 只是制定规责。 制定Task 。 然后具体操作由各种插件完成。  例:编译java代码的task 用 java插件完成。

task是Gradle中的一种数据类型,它代表了一些要执行或者要干的工作。不同的插件可以添加不同的Task。每一个Task都需要和一个Project关联。

setting.gradle  告诉Gradle这个multiprojects包含哪些子projects:
build.gradle  构建。

apply 是一个函数。
apply plugin: 'com.android.library' <==如果是编译Library,则加载此插件  
apply plugin: 'com.android.application' <==如果是编译Android APP,则加载此插件  

apply from: rootProject.getRootDir().getAbsolutePath() + "/utils.gradle"  读取AndroidManifest.xml中
的versionName,或者是copy jar包/APK包到指定的目录



// 声明是Android程序,apply方法,加载 编译 android App 时 加载此插件 
apply plugin: 'com.android.application'

android {
    // 编译SDK的版本
    compileSdkVersion 21
    // build tools的版本
    buildToolsVersion "21.1.1"

    defaultConfig {
        // 应用的包名
        applicationId "me.storm.ninegag"
        minSdkVersion 14
        targetSdkVersion 21
        versionCode 1
        versionName "1.0.0"
    }

    // java版本
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_7
        targetCompatibility JavaVersion.VERSION_1_7
    }

    buildTypes {
        release {
            // 是否进行混淆
            minifyEnabled false
            // 混淆文件的位置
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        }
    }

    // 移除lint检查的error
    lintOptions {
      abortOnError false
    }
}

dependencies {
    // 编译libs目录下的所有jar包
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:support-v4:21.0.2'
    compile 'com.etsy.android.grid:library:1.0.5'
    compile 'com.alexvasilkov:foldable-layout:1.0.1'
    // 编译extras目录下的ShimmerAndroid模块
    compile project(':extras:ShimmerAndroid')
}


apply plugin: 'com.android.application'//说明module的类型,com.android.application为程序,com.android.library为库
android {
    compileSdkVersion 22//编译的SDK版本
    buildToolsVersion "22.0.1"//编译的Tools版本
    defaultConfig {//默认配置
        applicationId "com.nd.famlink"//应用程序的包名
        minSdkVersion 8//支持的最低版本
        targetSdkVersion 19//支持的目标版本
        versionCode 52//版本号
        versionName "3.0.1"//版本名
    }
    sourceSets {//目录指向配置
        main {
            manifest.srcFile 'AndroidManifest.xml'//指定AndroidManifest文件
            java.srcDirs = ['src']//指定source目录
            resources.srcDirs = ['src']//指定source目录
            aidl.srcDirs = ['src']//指定source目录
            renderscript.srcDirs = ['src']//指定source目录
            res.srcDirs = ['res']//指定资源目录
            assets.srcDirs = ['assets']//指定assets目录
            jniLibs.srcDirs = ['libs']//指定lib库目录
        }
        debug.setRoot('build-types/debug')//指定debug模式的路径
        release.setRoot('build-types/release')//指定release模式的路径
    }
    signingConfigs {//签名配置
        release {//发布版签名配置
            storeFile file("fk.keystore")//密钥文件路径
            storePassword "123"//密钥文件密码
            keyAlias "fk"//key别名
            keyPassword "123"//key密码
        }
        debug {//debug版签名配置
            storeFile file("fk.keystore")
            storePassword "123"
            keyAlias "fk"
            keyPassword "123"
        }
    }
    buildTypes {//build类型
        release {//发布
            minifyEnabled true//混淆开启
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt'//指定混淆规则文件
            signingConfig signingConfigs.release//设置签名信息
        }
        debug {//调试
            signingConfig signingConfigs.release
        }
    }
    packagingOptions {
        exclude 'META-INF/ASL2.0'//排除一些文件
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/NOTICE'
        exclude 'META-INF/MANIFEST.MF'
    }
    lintOptions {
        abortOnError false//lint时候终止错误上报,防止编译的时候莫名的失败
    }
}
dependencies {
    compile fileTree(dir: 'libs', exclude: ['android-support*.jar'], include: ['*.jar']) //编译lib目录下的.jar文件
    compile project(':Easylink')//编译附加的项目
    compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.3'//编译来自Jcenter的第三方开源库
}
Gradle常用命令
gradle --help
gradle tasks //列出task列表
gradle asD (gradle assembleDebug) //编译debug打包
gradle asR (gradle assembleRelease) //编译release打包
gradle asD --refresh-dependencies //强制刷新依赖
gradle asD --parallel //并行编译
gradle asD --parallel-threads 3
gradle build gradle clean
直接执行gradle build会生成debug包和release包如果不想要debug包可以使用gradleasR命令。
上面大家接触了一些命令如./gradlew -v./gradlew clean./gradlew build, 这里注意是./gradlew,./代表当前目录,gradlew代表 gradlewrapper,意思是gradle的一层包装,大家可以理解为在这个项目本地就封装了gradle,即gradle wrapper,在9GAG/gradle/wrapper/gralde-wrapper.properties文件中声明了它指向的目录和版本。只要下载成功即可用grdlew wrapper的命令代替全局的gradle命令。z理解了gradlewrapper的概念,下面一些常用命令也就容易理解了。
·./gradlew-v版本号
·./gradlewclean清除9GAG/app目录下的build文件夹
·./gradlewbuild检查依赖并编译打包
这里注意的是./gradlew build命令把debug、release环境的包都打出来,如果正式发布只需要打Release的包,该怎么办呢,下面介绍一个很有用的命令assemble,如
·./gradlewassembleDebug编译并打Debug包
·./gradlewassembleRelease编译并打Release的包
除此之外,assemble还可以和productFlavors结合使用,具体在下一篇多渠道打包进一步解释。
·./gradlewinstallRelease Release模式打包并安装
·./gradlewuninstallRelease卸载Release模式包






实际应用:

1:当打包os包出现问题时
当您在Android上安装APK时,系统将按照由Build确定的顺序在APK的lib文件夹内查找本机库目录(armeabi,armeabi-v7a,arm64-v8a,x86,x86_64,mips64,mips)。SUPPORTED_ABIS。

如果您的应用程序碰巧有一个缺少lib的arm64-v8a目录,则不会从另一个目录安装缺少的lib,这些lib不会混合。 这意味着您必须为每个架构提供一整套库。

因此,要解决您的问题,您可以从构建中删除您的64位库,或者将abiFilter设置为仅打包32位体系结构

ndk {
    abiFilters "armeabi", "armeabi-v7a", "x86", "mips"
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值