Gradle初识(Studio和Eclipse)

Gradle在Android开发中的应用
本文介绍Gradle作为构建工具的基本概念及其在Android开发中的具体应用,包括配置jar包、签名打包流程、BuildConfig使用、多渠道打包方法等,并探讨了如何配置以跳过lint错误检查。

1.gradle概念

a.它是一个构建工具

b.它是以Groovy语言为基础

c.它主要面向Java语言

2.gradle配置jar包,和libs文件夹导入jar包的区别


点击“OK”后:(下图右侧是app->build.gradle)


这些jar包是从哪里来的呢?(下图是HelloWorld->build.gradle)



3.签名打包

a.利用Studio

方式一:Buile->Generate Signed APK...

方式二:

填写Signing信息:


填写Build Types信息:


点击“OK"后,在图形化界面填好的东西(Signing和Build Types)就写到了app->build.gradle中:


在生成APK时,会读取这个配置文件,因构建类型(build types)是release,从而生成release类型的apk。

b.命令行


(其他命令如gradlew clean、build...)

    

在下面的视图中,也可通过双击运行Gradle脚本:


4.BuildConfig


将debug改为release:


结果是:


由此可见,可以在全局直接用BuildConfig.DEBUG来判断是否在测试环境还是生产环境。

5.module中build.gradle文件参数简介


主要顾名思义即可,其中minSdkVersion、targetSdkVersion、versionCode、versionName在Eclipse环境中是在mainfest文件中配置的,但在studio下是在build.gradle中配置的,gradle是构建工程的,gradle在构建工程时,会把这些字段copy到mainfest文件中,有个merge过程。

6.配置跳过lint错误检查

Gradle build finished with 1 error(s) in 32s 888ms


根据错误提示,在build.gradle中添加方框中的代码即可。


在Eclipse中使用gradle进行多渠道打包:

1.在eclipse的Marketplace中搜索并安装插件:Buildship Gradle

2.Window->Preference->Gradle设置默认gradle路径,如下载到最新版本gradle到F盘:F:\gradle-3.5-all\gradle-3.5;设置环境变量GRADLE_HOME并加入到Path,通过命令行gradle -v来验证。

3.右键工程Export->Generate Gradle build files,选中工程目录,finish。

4.这时会在工程同级目录下生成:gradle、gradlew、gradlew.bat、build.gradle、settings.gradle这几个文件。其中gradle、gradlew、gradlew.bat是多余生成的默认文件,没有用处,可以直接删除。

要注意,每次Export后都要进行如下操作:

因为Export后会重置并更新build.gradle和settings.gradle文件,其中要修改build.gradle中默认的classpath 'com.android.tools.build:gradle:1.0.0'为最新版本classpath 'com.android.tools.build:gradle:2.3.1'。

5.单纯的只复制build.grade到工程目录运行是行不通的,因为setting.gradle也要加入对此工程的说明,要注意到在发布其他工程时,setting.gradle重置变化了。

6.命令行cd到工程目录,gradle clean,会在工程同级目录生成.gradle文件。

7.修改工程目录下的build.gradle文件如下:

apply plugin: 'com.android.application'

dependencies {
    compile fileTree(dir: 'libs', include: '*.jar')
    compile project(':xxxLib')
}

android {
    compileSdkVersion 21
    buildToolsVersion "25.0.2"

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_7
        targetCompatibility JavaVersion.VERSION_1_7
    }

    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            aidl.srcDirs = ['src']
            renderscript.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']
            jniLibs.srcDirs = ['libs']//默认无此项,会导致libs库文件未编译进去
        }

        // Move the tests to tests/java, tests/res, etc...
        instrumentTest.setRoot('tests')

        // Move the build types to build-types/<type>
        // For instance, build-types/debug/java, build-types/debug/AndroidManifest.xml, ...
        // This moves them out of them default location under src/<type>/... which would
        // conflict with src/ being used by the main source set.
        // Adding new build types or product flavors should be accompanied
        // by a similar customization.
        debug.setRoot('build-types/debug')
        release.setRoot('build-types/release')
    }
    lintOptions {
          abortOnError false
    }
    signingConfigs {  
        myConfig {
            storeFile file("xxx.keystore")
            storePassword "xxxxxx"
            keyAlias "xxx"
            keyPassword "xxxxxx"
        }
    }
    buildTypes {
        release {
            signingConfig signingConfigs.myConfig
            minifyEnabled true// 上线版本绝对有必要代码混淆,否则动动手指就能知晓你的全部代码,这是非常可怕的
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt'
        }
    }
    productFlavors {
        baidu {
            manifestPlaceholders = ["CHANNEL_NAME":"Baidu"]
        }
        xiaomi {
            manifestPlaceholders = ["CHANNEL_NAME":"Xiaomi"]
        }
    }
}

运行:gradle build即在工程目录下生成4个apk,分别是baidu和xiaomi渠道的debug和release版本。build后会在工程同级目录下生成build目录,不用理会。

关于混淆,如果开启,要注意有些依赖的第三方库对混淆有一定要求,如百度地图在混淆时要求放过对某些代码的混淆否则编译不通过,一般第三方程序都会对此给予说明。

或者在生成release apk时不混淆,在发布时通过第三方工具加固也行。

其中,manifestPlaceholders中key和value会在生成apk时替换掉AndroidManifest.xml中${ABC}为Baidu这样的值(即使是包名也可在生成apk时完成替换),

即:<meta-data

            android:name="XXXXXX"
            android:value="${ABC}" />

变为:<meta-data

            android:name="XXXXXX"
            android:value="Baidu" />

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

itzyjr

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值