前些日子研究过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的下载过程,实现离线配置。