Freeline的离线配置与源码修改再编译

前些日子研究过freeline,然后写了篇博客分享给大家。后来由于项目需要,又研究了下freeline的离线配置(内网开发表示很不爽)。所以今天就分享一下如何对freeline进行离线配置以及对源码进行修改。
思路很简单,就是修改源码,跳过freeline的下载过程。这就需要我们事先下好freeline所需要的文件。

前期准备:freeline源码一份,freeline下载到工程中的文件一份
下载地址:https://github.com/alibaba/freeline/releases
这里写图片描述

再准备好这些以后,我们就可以开工了。由于freeline事由Groovy语言编写的,所以我用了Android Studio来编译。然后直接导入源码即可(下载好的源码中gradle文件夹下)。
这里写图片描述

再导入工程之后通常会被告知少了各种依赖包,我的解决方法就是一一导入,这里介绍一个找包的网站,只要输入相关的信息即可。
https://mvnrepository.com/
以下是我build.gradle的主要配置:

apply plugin: 'groovy'
apply plugin: 'java'
apply from: 'bintray.gradle'

group 'com.antfortune.freeline'
version '0.7.2'

sourceCompatibility = 1.6
targetCompatibility = 1.6

buildscript {
    repositories {
        jcenter()
    }

    dependencies {
        classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.4'
        classpath 'com.github.dcendents:android-maven-gradle-plugin:1.4.1'
    }
}

repositories {
    jcenter()
}

dependencies {
    compile gradleApi()
    compile 'com.squareup:javapoet:1.7.0'
    compile 'com.github.javaparser:javaparser-core:2.4.0'
    compile group: 'com.google.collections', name: 'google-collections', version: '1.0-rc2'
    // https://mvnrepository.com/artifact/org.ow2.asm/asm
    compile group: 'org.ow2.asm', name: 'asm', version: '4.0'
}

jar {
    from {
        configurations.compile.findResults {
            it.absolutePath.contains('javapoet') ||  it.absolutePath.contains('javaparser-core') ? zipTree(it) : null
        }
    }
}

再做完相关配置以后,我们就可以对源码动刀了。其实也不用修改多少,只是再FreelineInitializer类中注释掉下载的那部分即可。是不是很简单?需要注意的一点就是要将你下载的文件与代码中要解压的文件名一致(比如说下载的是freeline-v0.7.2.zip,那么你可以改为freeline.zip)

public static void initFreeline(Project project) {
        println "Freeline init process start..."

        /*def mirror = project.hasProperty("mirror")
        def snapshot = project.hasProperty("snapshot")
        def freelineVersion = FreelineUtils.getProperty(project, "freelineVersion")
        def cdnUrl = FreelineUtils.getProperty(project, "freelineCdnUrl")
        if (FreelineUtils.isEmpty(cdnUrl as String)) {
            cdnUrl = CDN_URL
        }

        def url
        if (snapshot) {
            println "[NOTE] Download freeline snapshot enabled..."
            url = "${cdnUrl}/snapshot.zip"
        } else if (freelineVersion) {
            println "[NOTE] Download freeline dependency for specific version ${freelineVersion}..."
            url = "${cdnUrl}/freeline-v${freelineVersion}.zip"
        } else {
            def json = FreelineUtils.getJson(LATEST_RELEASE_URL)
            if (json == null || json == '') {
                println "Download Error: failed to get json from ${LATEST_RELEASE_URL}"
                return
            }

            String latestVersion = json.name
            String freelineGradleVersion = getFreelineGradleVersion(project)
            int result = isFreelineGradleVersionNeedToBeUpdated(freelineGradleVersion, latestVersion)
            if (result < 0) {
                throw new RuntimeException("Your local freeline version ${freelineGradleVersion} is lower than " +
                        "the lastest release version ${latestVersion}. Please update the freeline version in " +
                        "build.gradle. If you still want the specific version of freeline, you can execute the " +
                        "initial command with the extra parameter `-PfreelineVersion={your-wanted-version}`. " +
                        "eg: `gradlew initFreeline -PfreelineVersion=${freelineGradleVersion}`")
            } else if (result > 0) {
                println "[WARNING] Your local freeline version ${freelineGradleVersion} is greater than the " +
                        "lastest release version ${latestVersion}."
            }

            if (mirror) {
                println "[NOTE] Download freeline dependency from mirror..."
                url = "${cdnUrl}/${json.assets[0].name}"
            } else {
                url = json.assets[0].browser_download_url
            }
        }
        println "Downloading release pack from ${url}"
        println "Please wait a minute..."
        def downloadFile = new File(project.rootDir, "freeline.zip.tmp")
        if (downloadFile.exists()) {
            downloadFile.delete()
        }

        def ant = new AntBuilder()
        ant.get(src: url, dest: downloadFile)
        downloadFile.renameTo("freeline.zip")
        println 'download success.'*/

        def ant = new AntBuilder()

        def freelineDir = new File(project.rootDir, "freeline")
        if (freelineDir.exists()) {
            FreelineUtils.deleteDirectory(freelineDir)
            println 'removing existing freeline directory'
        }
        ant.unzip(src: "freeline.zip", dest: project.rootDir.absolutePath)
        println 'unziped freeline.zip.'

接下来就是将改好的源码进行编译即可。只要选择make project即可。最后一步,将原来的gradle-0.7.2jar包中编译过得文件替换掉即可。这个jar包就在C盘中当前用户的.gradle里面。具体会根据你gradle的配置不同而不同。
这里写图片描述

这些完成以后,还是老样子,按照给的配置过程即可,只是会跳过freeline的下载过程,实现离线配置。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值