技术经验谈 技术经验谈
首页
  • 最佳实践

    • 抓包
    • 数据库操作
  • ui

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
  • 总纲
  • 整体开发框架
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

hss01248

一号线程序员
首页
  • 最佳实践

    • 抓包
    • 数据库操作
  • ui

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
  • 总纲
  • 整体开发框架
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 编译和自动化

    • gradle基础
    • gradle-task
    • appbundle打包的自动化
    • cmake vs gradle
    • cmake入门
    • gradle依赖管理
    • gradle加速之拉取依赖的加速
    • gradle远程脚本
      • 放在gitlab上
      • 放到github上
      • 使用bugly
      • 4 如何一个url解决带gradle插件的库的依赖问题
        • 一般带插件的库,用法都是类似这样(以doreamkit为例子):
      • 全部写到一个脚本里,如下:
      • 引用方式:
    • maven
    • 多module时自动发布所有lib
    • 将react native打包成一个aar
  • 异常上报和监测

  • SDK封装方法论
  • 结构化文档一键转代码的实践-埋点-翻译-java api注释
  • 防御式编程例子1-颜色解析工具的处理
  • 工程方法
  • 编译和自动化
hss01248
2021-05-20
目录

gradle远程脚本

# gradle远程脚本

# 1 本地脚本插件使用

格式

apply from: 'sharpImage.gradle'//和脚本同一个目录
apply from: "${rootProject.rootDir}/bugly.gradle"//根目录下
1
2

可以在项目根目录的build.gradle里,也可以放到子module的build.gradle里

一般通过这种方式将不同功能的脚本拆分到不同的gradle文件中,便于管理.

# 2 远程脚本

将一些通用的gradle放到远程,以进一步提高复用性.避免了文件拷来拷去.

其对gradle脚本里各对象的访问与本地脚本插件完全一致.

# 放在gitlab上

通过gitlab的api v4来访问

示例:

apply from:  'https://git.私有化部署的gitlab域名.com/api/v4/projects/projectId(工程id)/repository/files/目录名%2F文件名/raw?ref=分支名&private_token=token内容'
//子路径里的/要写成%2F
1
2

# 放到github上

通过rawapi或者jsdeliver(cdn)来访问

apply from: 'https://raw.githubusercontent.com/hss01248/flipperUtil/master/remote_forceokhttp3_12.gradle'

中国国内可使用cdn:
  apply from: 'https://cdn.jsdelivr.net/gh/hss01248/flipperUtil@master/remote_forceokhttp3_12.gradle'
  
//格式:  https://cdn.jsdelivr.net/gh/github用户名/仓库名@分支名/目录/文件名
1
2
3
4
5
6

# 3 一些脚本示例

# 使用bugly

bugly.gradle放到项目根目录下.

在bugly.gradle里:

apply plugin: 'bugly'

bugly {
    appId = 'App ID' // 注册时分配的App ID
    appKey = 'App Key' // 注册时分配的App Key
}
1
2
3
4
5
6

在app的build.gradle里:

apply from: "${rootProject.rootDir}/bugly.gradle"//根目录下
1

# 4 如何一个url解决带gradle插件的库的依赖问题

# 一般带插件的库,用法都是类似这样(以doreamkit为例子):

在项目的 build.gradle 中添加 classpath。

buildscript {
    dependencies {
        …
        classpath 'io.github.didi.dokit:dokitx-plugin:3.4.0-alpha02'
        …
    }
}
1
2
3
4
5
6
7

在 app 的 build.gradle 中添加 plugin。

apply plugin: 'com.didi.dokit'

dependencies {
    …
    debugImplementation 'io.github.didi.dokit:dokitx:3.4.0-alpha02'
    releaseImplementation 'io.github.didi.dokit:dokitx-no-op:3.4.0-alpha02'
    …
}
1
2
3
4
5
6
7
8

插件配置选项: 添加到app module 的build.gradle文件下 与android {}处于同一级

dokitExt {
    //通用设置
    comm {
        //地图经纬度开关
        gpsSwitch true
        //网络开关
        networkSwitch true
      .....}
}
1
2
3
4
5
6
7
8
9

# 全部写到一个脚本里,如下:

主要是apply plugin的时机要在ProjectEvaluationListener的afterEvaluate里,相当于添加在app.gradle的最末尾

import java.util.function.Consumer

rootProject.buildscript {
    repositories {
        jcenter()
        mavenCentral()
        mavenLocal()
        google()
    }
    dependencies {
        classpath 'io.github.didi.dokit:dokitx-plugin:3.4.0-alpha02'
    }
}

/*rootProject.allprojects{
    apply plugin: 'McImage'
}*/

rootProject.allprojects.forEach(new Consumer<Project>() {
    @Override
    void accept(Project project) {
        println("project:" + project);
        project.repositories {
            jcenter()
            mavenCentral()
            mavenLocal()
            google()
        }
        /*project.apply {
        //无效
            plugin: 'com.example.myplugin'
        }*/
    }
})

gradle.addProjectEvaluationListener(new ProjectEvaluationListener() {
    @Override
    void beforeEvaluate(Project project) {
        println("==--->beforeEvaluate:开始解析当前build.gradle: " + project);
    }

    @Override
    void afterEvaluate(Project project, ProjectState projectState) {
        println("==--->afterEvaluate: 解析当前module下build.gradle完成: " + project);

        if (project.plugins.findPlugin("com.android.application") != null) {
            project.apply plugin: 'com.didi.dokit'
            project.dependencies {
                debugImplementation 'io.github.didi.dokit:dokitx:3.4.0-alpha02'
                releaseImplementation 'io.github.didi.dokit:dokitx-no-op:3.4.0-alpha02'
            }
            project {
                dokitExt {
                    //通用设置
                    comm {
                        //地图经纬度开关
                        gpsSwitch true
                        //网络开关
                        networkSwitch true
                        //大图开关
                        bigImgSwitch true
                        //webView js 抓包
                        webViewSwitch true
                    }

                }
            }

            //一些全局依赖配置可以在这里处理
            project.configurations {
                all*.exclude group: 'com.google.guava', module: 'listenablefuture'
                all {
                    resolutionStrategy {
                        force "com.google.android.material:material:1.2.1"
                    }
                }
            }
        }
    }
})


subprojects {
    //println("project2:"+project);
    // //无效
    //project.apply plugin: 'com.example.myplugin'
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87

# 引用方式:

根目录的build.gradle的buildscript中

buildscript {
    apply from: 'dokit.gradle'
    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath "com.android.tools.build:gradle:4.1.0"
}
1
2
3
4
5
6
7
8
9
编辑 (opens new window)
上次更新: 2022/08/25, 20:20:31
gradle加速之拉取依赖的加速
maven

← gradle加速之拉取依赖的加速 maven→

最近更新
01
截图后的自动压缩工具
12-27
02
图片视频文件根据exif批量重命名
12-27
03
chatgpt图片识别描述功能
02-20
更多文章>
Theme by Vdoing | Copyright © 2020-2025 | 粤ICP备20041795号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式