Gradle Hacks

****一、****Hack one:

将android studio中Library生成的aar文件上传到本地建立的(maven)仓库中,方便今后的库文件的管理和调用

solution:

1、将一个module成为一个android第三方库文件:

1>、在app这个module下面的build.gradle文件中:

apply plugin: 'com.android.application'

修改为:

apply plugin: 'com.android.library'

2>、在

android {
   .....
    lintOptions{
        abortOnError false
    }
}

中这样添加(不加的话报错会提示)

3>在mac下的Terminal中,运行

sudo ./gradlew build

成功之后,在build/libs会有打包好的aar文件

2、将aar文件打包至指定的本地maven仓库中

1>、在build.gradle文件中添加:

apply plugin: 'maven'
.....
.....
ext {
    PUBLISH_GROUP_ID = 'com.fantianwen'
    PUBLISH_ARTIFACT_ID = 'keyboard'
    PUBLISH_VERSION = android.defaultConfig.versionName
}

uploadArchives {
    repositories.mavenDeployer {
        def deployPath = file(getProperty('aar.deployPath'))
        repository(url: "file:///${deployPath.absolutePath}")
        pom.project {
            groupId project.PUBLISH_GROUP_ID
            artifactId project.PUBLISH_ARTIFACT_ID
            version project.PUBLISH_VERSION
        }
    }
}

其中:
ext可以定义动态属性。
uploadArchives定义上传aar文件的一个任务。

2>、使用命令:

sudo ./gradlew uploadArchives

这样在本地仓库就有了。

二、Hack two

将打包的apk文件放置在工程某文件夹下,或者放着在多个地方,或者上传至远程仓库

Solution:

uploadArchives {
    repositories {
        flatDir {
            dirs 'file:///Users/RadAsm/gradle-study/0625'
        }
    }
}

将打包的文件放置在/Users/RadAsm/gradle-study/0625这个文件夹下面

三、Hack three

如何使用maven或者ivy的仓库

solution:

repositories {
    maven {
        url "http://repo.mycompany.com/maven2"
    }
}
repositories {
    ivy {
        url "http://repo.mycompany.com/repo"
    }
}

或者使用maven的本地仓库

repositories {
    maven {
        // URL can refer to a local directory
        url "../local-repo"
    }
}

四、Hack four

使用gradle打包android library并上传至jcenter全球maven库

solution

在project根目录下面的build.gradle的dependencies节点下:

classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.0'
classpath 'com.github.dcendents:android-maven-gradle-plugin:1.3'

library的build.gradle文件中:

apply plugin: 'com.android.library'
apply plugin: 'com.github.dcendents.android-maven'
apply plugin: 'com.jfrog.bintray'

version = "1.3"

def siteUrl = 'https://github.com/fantianwen/CommonDHJT'    // project homepage
def gitUrl = 'https://github.com/fantianwen/CommonDHJT.git' // project git

group = "com.chinaums.dhjt"

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.1"

    defaultConfig {
        minSdkVersion 8
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

    sourceSets {
        main {
            jniLibs.srcDirs = ["libs"]
        }

    }
    lintOptions{
        abortOnError false
    }

}

install {
    repositories.mavenInstaller {
        // This generates POM.xml with proper parameters
        pom {
            project {
                packaging 'aar'
                name 'dhjt-sdk-release'
                url siteUrl
                licenses {
                    license {
                        name 'The Apache Software License, Version 2.0'
                        url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
                    }
                }
                developers {
                    developer {
                        id 'fantianwen'
                        name 'tianwen.fan'
                        email 'twfan_09@hotmail.com'
                    }
                }
                scm {
                    connection gitUrl
                    developerConnection gitUrl
                    url siteUrl
                }
            }
        }
    }
}

task sourcesJar(type: Jar) {
    from android.sourceSets.main.java.srcDirs
    classifier = 'sources'
}

task javadoc(type: Javadoc) {
    source = android.sourceSets.main.java.srcDirs
    classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
}

task javadocJar(type: Jar, dependsOn: javadoc) {
    classifier = 'javadoc'
    from javadoc.destinationDir
}

artifacts {
    archives javadocJar
    archives sourcesJar
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.0.1'
}

Properties properties = new Properties()
properties.load(project.rootProject.file('local.properties').newDataInputStream())
bintray {
    user = properties.getProperty("bintray.user")
    key = properties.getProperty("bintray.apikey")
    configurations = ['archives']
    pkg {
        repo = "maven"
        name = "dhjt-sdk-release"                // project name in jcenter
        websiteUrl = siteUrl
        vcsUrl = gitUrl
        licenses = ["Apache-2.0"]
        publish = true
    }
}

同时你需要在工程根目录下面的local.properties中书写:

bintray.user = yourName
bintray.apikey = XXXXXXXX

然后依次执行gradle命令


bash gradlew javadocJar

bash gradlew sourcesJar

bash gradlew install

bash gradlew bintrayUpload

这样library就上传到了jcenter中,但是一个********新的********jcenter中的文件目录(library)需要进行提交审核。然后提交审核一下就OK了,一般从提交到审核完毕需要8小时左右。

****Note****:注意你的library的名称,就是在jcenter中的文件名称了,这个会区分文件目录,新的文件目录需要提交审核!

如何在build.gradle中进行library的引用

上传完毕之后,会在>>library根目录>>build>>poms下面生成pom-default文件,该文件中有诸如下面的说明:

  <groupId>com.chinaums.dhjt</groupId>
  <artifactId>dhjt-sdk-release</artifactId>
  <version>1.3</version>
  <packaging>aar</packaging>
  <name>dhjt-sdk-release</name>

然后,引用的时候,按照格式:

compile 'groupId:artifactId:version'

进行引用

注意点:

只有不同的library的名称才需要重新提交,已经审核通过的,但是不同版本(经过迭代,提高版本)只要upload上去,不再需要重新审核了。

五、Hack 5

多渠道打包

1、多个module同时需要使用一样的变量配置(共享gradle文件)

在rootProject的build.gradle中声明该文件即可

apply from: 'buildsystem/dependencies.gradle'

其中,denpendencies.gradle中如此定义变量

ext {
    ANDROID_BUILD_MIN_SDK_VERSION = '8'
    ANDROID_COMPILE_SDK_VERSION = '19'
    ANDROID_TARGET_SDK_VERSION = '15'
    ANDROID_BUILD_TOOLS_VERSION = '23.0.2'
    VERSION_NAME = 'v2.0.2'
    VERSION_CODE = '180'
}

然后,在各个模块的gradle文件中,使用

def globalConfiguration = rootProject.extensions.getByName('ext')

就行获取到全局变量

2、android{...}

defaultConfig

所有定义在defaultConfig中的变量,如果在AndroidManifest.xml中有定义,将会对AndroidManifest.xml文件中的变量进行覆写

productFlavors{...}

定义各种不用的“渠道”

比方说定义了如下的渠道:

pro{
}
air{
}

那么在Build>Select Build Variant中将会看见不同的打包的参数

这个打包的参数,在执行./gradlew assemble命令的时候会全部执行,从而在build下面生成不同版本的apk

variantFilter{...}

对上面的buildVariant进行过滤,如果设置

 variant.setIgnore(false)

则表示,在assemble中,会进行相应打包命令的忽略,会在Build Variant中看见相应的打包参数发生了变化

各种不用的打包命令中对进行的处理

applicationVariants.all{variant->...}

2、如果在不用的渠道打包过程中需要compile不同的文件

dependencies {
    
    for (def i = 0; i < android.productFlavors.size(); i++) {
        if (android.productFlavors[i].name == 'dhjt_debug') {
            dhjt_debugCompile files('libs/mpos-plugin-sdk-3.5.0-debug.jar')
        }
        if (android.productFlavors[i].name == 'dhjt_release') {
            dhjt_releaseCompile files('libs/mpos-plugin-sdk-3.5.0.jar')
        }
    }

}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,319评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,801评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,567评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,156评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,019评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,090评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,500评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,192评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,474评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,566评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,338评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,212评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,572评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,890评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,169评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,478评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,661评论 2 335

推荐阅读更多精彩内容