Skip to content

Commit

Permalink
Merge pull request #844 from hyongbai/fea-2.3.3
Browse files Browse the repository at this point in the history
gradle兼容等
  • Loading branch information
hyongbai authored Jul 1, 2019
2 parents 312646b + 2aa2ebb commit 2c3de71
Show file tree
Hide file tree
Showing 14 changed files with 439 additions and 186 deletions.
86 changes: 0 additions & 86 deletions replugin-host-gradle/bintray.gradle

This file was deleted.

9 changes: 5 additions & 4 deletions replugin-host-gradle/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,11 @@ apply plugin: 'java'
apply plugin: 'groovy'
apply plugin: 'maven'
apply plugin: 'maven-publish'
//apply from: 'config.gradle'

repositories {
jcenter()
mavenCentral()
maven() { url 'https://maven.google.com' }
}

buildscript {
Expand All @@ -32,15 +32,16 @@ buildscript {
}

dependencies {
// classpath 'com.android.tools.build:gradle:2.1.0'
// 将项目发布到JCenter 所需要的jar 添加依赖
classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.0'
classpath 'com.github.dcendents:android-maven-plugin:1.2'
}
}

dependencies {
compile 'com.android.tools.build:gradle:2.1.3'
compile 'com.android.tools.build:gradle:2.1.3' // >= 2.14.1
// compile 'com.android.tools.build:gradle:2.3.3' // gradle 3.3 <= {} < gradle-4.10
// compile 'com.android.tools.build:gradle:3.3.2' // >= gradle-4.10
// compile 'com.android.tools.build:gradle:3.4.1' // >= gradle-5.1.1
compile 'org.json:json:20160212'
compile 'org.codehaus.groovy:groovy:2.4.7'
compile 'com.squareup:javapoet:1.5.1'
Expand Down
28 changes: 0 additions & 28 deletions replugin-host-gradle/config.gradle

This file was deleted.

25 changes: 0 additions & 25 deletions replugin-host-gradle/config.properties

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
package com.qihoo360.replugin.gradle.compat

import com.android.sdklib.IAndroidTarget

/**
* @author hyongbai
*/
class ScopeCompat {
static def getAdbExecutable(def scope) {
final MetaClass scopeClz = scope.metaClass
if (scopeClz.hasProperty(scope, "androidBuilder")) {
return scope.androidBuilder.sdkInfo.adb
}
if (scopeClz.hasProperty(scope, "sdkComponents")) {
return scope.sdkComponents.adbExecutableProvider.get()
}
}

// TODO: getBuilderTarget
// static def getBuilderTarget(def scope, def target){
// final MetaClass scopeClz = scope.metaClass
//
// if (scopeClz.hasProperty(scope, "androidBuilder")) {
// return scope.getAndroidBuilder().getTarget().getPath(target) //IAndroidTarget.ANDROID_JAR
// }
//
// return globalScope.getAndroidBuilder().getTarget().getPath(IAndroidTarget.ANDROID_JAR)
// }

static def getAndroidJar(def scope){
final MetaClass scopeClz = scope.metaClass

if (scopeClz.hasProperty(scope, "androidBuilder")) {
return scope.getAndroidBuilder().getTarget().getPath(IAndroidTarget.ANDROID_JAR)
}
if (scopeClz.hasProperty(scope, "sdkComponents")) {
return scope.sdkComponents.androidJarProvider.get().getAbsolutePath()
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package com.qihoo360.replugin.gradle.compat

import org.gradle.api.Task

/**
* @author hyongbai
*/
class VariantCompat {
static def getAssembleTask(def variant) {
return compatGetTask(variant, "getAssembleProvider", "getAssemble")
}

static def getMergeAssetsTask(def variant) {
return compatGetTask(variant, "getMergeAssetsProvider", "getMergeAssets")
}

static def getGenerateBuildConfigTask(def variant) {
return compatGetTask(variant, "getGenerateBuildConfigProvider", "getGenerateBuildConfig")
}

static def getProcessManifestTask(def variant) {
return compatGetTask(variant, "getProcessManifestProvider", "getProcessManifest")
}

static def compatGetTask(def variant, String... candidates) {
candidates?.findResult {
variant.metaClass.respondsTo(variant, it).with {
if (!it.isEmpty()) return it
}
}?.find {
it.getParameterTypes().length == 0
}?.invoke(variant)?.with {
//TODO: check if is provider!!!
Task.class.isInstance(it) ? it : it?.get()
}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ package com.qihoo360.replugin.gradle.host

import com.android.build.gradle.AppExtension
import com.android.build.gradle.AppPlugin
import com.qihoo360.replugin.gradle.compat.VariantCompat
import com.qihoo360.replugin.gradle.host.creator.FileCreators
import com.qihoo360.replugin.gradle.host.creator.IFileCreator
import com.qihoo360.replugin.gradle.host.creator.impl.json.PluginBuiltinJsonCreator
Expand Down Expand Up @@ -56,8 +57,10 @@ public class Replugin implements Plugin<Project> {
checkUserConfig(config)
}

def appID = variant.generateBuildConfig.appPackageName
def generateBuildConfigTask = VariantCompat.getGenerateBuildConfigTask(variant)
def appID = generateBuildConfigTask.appPackageName
def newManifest = ComponentsGenerator.generateComponent(appID, config)
println "${TAG} countTask=${config.countTask}"

def variantData = variant.variantData
def scope = variantData.scope
Expand All @@ -72,7 +75,6 @@ public class Replugin implements Plugin<Project> {
generateHostConfigTask.group = AppConstant.TASKS_GROUP

//depends on build config task
def generateBuildConfigTask = variant.getGenerateBuildConfig()
if (generateBuildConfigTask) {
generateHostConfigTask.dependsOn generateBuildConfigTask
generateBuildConfigTask.finalizedBy generateHostConfigTask
Expand All @@ -88,41 +90,54 @@ public class Replugin implements Plugin<Project> {
generateBuiltinJsonTask.group = AppConstant.TASKS_GROUP

//depends on mergeAssets Task
def mergeAssetsTask = variant.getMergeAssets()
def mergeAssetsTask = VariantCompat.getMergeAssetsTask(variant)
if (mergeAssetsTask) {
generateBuiltinJsonTask.dependsOn mergeAssetsTask
mergeAssetsTask.finalizedBy generateBuiltinJsonTask
}

variant.outputs.each { output ->
output.processManifest.doLast {
output.processManifest.outputs.files.each { File file ->
def manifestFile = null;
//在gradle plugin 3.0.0之前,file是文件,且文件名为AndroidManifest.xml
//在gradle plugin 3.0.0之后,file是目录,且不包含AndroidManifest.xml,需要自己拼接
//除了目录和AndroidManifest.xml之外,还可能会包含manifest-merger-debug-report.txt等不相干的文件,过滤它
if ((file.name.equalsIgnoreCase("AndroidManifest.xml") && !file.isDirectory()) || file.isDirectory()) {
if (file.isDirectory()) {
//3.0.0之后,自己拼接AndroidManifest.xml
manifestFile = new File(file, "AndroidManifest.xml")
} else {
//3.0.0之前,直接使用
manifestFile = file
}
//检测文件是否存在
if (manifestFile != null && manifestFile.exists()) {
println "${AppConstant.TAG} handle manifest: ${manifestFile}"
def updatedContent = manifestFile.getText("UTF-8").replaceAll("</application>", newManifest + "</application>")
manifestFile.write(updatedContent, 'UTF-8')
}
}
VariantCompat.getProcessManifestTask(output).doLast {
println "${AppConstant.TAG} processManifest: ${it.outputs.files}"
it.outputs.files.each { File file ->
updateManifest(file, newManifest)
}
}
}
}
}
}

/**
*
* @hyongbai
*
* 在gradle plugin 3.0.0之前,file是文件,且文件名为AndroidManifest.xml
* 在gradle plugin 3.0.0之后,file是目录,(特别是3.3.2)在这里改成递归的方式替换内部所有的 manifest 文件
*
* @param file manifest文件
* @param newManifest 需要添加的 manifest 信息
*/
def updateManifest(def file, def newManifest) {
// 除了目录和AndroidManifest.xml之外,还可能会包含manifest-merger-debug-report.txt等不相干的文件,过滤它
if (file == null || !file.exists() || newManifest == null) return
if (file.isDirectory()) {
println "${AppConstant.TAG} updateManifest: ${file}"
file.listFiles().each {
updateManifest(it, newManifest)
}
} else if (file.name.equalsIgnoreCase("AndroidManifest.xml")) {
appendManifest(file, newManifest)
}
}

def appendManifest(def file, def content) {
if (file == null || !file.exists()) return
println "${AppConstant.TAG} appendManifest: ${file}"
def updatedContent = file.getText("UTF-8").replaceAll("</application>", content + "</application>")
file.write(updatedContent, 'UTF-8')
}

// 添加 【查看所有插件信息】 任务
def addShowPluginTask(def variant) {
def variantData = variant.variantData
Expand Down Expand Up @@ -150,7 +165,7 @@ public class Replugin implements Plugin<Project> {
showPluginsTask.group = AppConstant.TASKS_GROUP

//get mergeAssetsTask name, get real gradle task
def mergeAssetsTask = variant.getMergeAssets()
def mergeAssetsTask = VariantCompat.getMergeAssetsTask(variant)

//depend on mergeAssetsTask so that assets have been merged
if (mergeAssetsTask) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
package com.qihoo360.replugin.gradle.host.creator.impl.json

import com.qihoo360.replugin.gradle.host.AppConstant
import com.qihoo360.replugin.gradle.compat.VariantCompat
import com.qihoo360.replugin.gradle.host.creator.IFileCreator
import groovy.io.FileType
import groovy.json.JsonOutput
Expand All @@ -35,8 +36,11 @@ public class PluginBuiltinJsonCreator implements IFileCreator {
def PluginBuiltinJsonCreator(def project, def variant, def cfg) {
this.config = cfg
this.variant = variant
//make sure processResources Task execute after mergeAssets Task, get real gradle task
fileDir = variant.getMergeAssets()?.outputDir
// make sure processResources Task execute after mergeAssets Task, get real gradle task
// 在 com.android.tools.build:gradle:3.3.2 及之前 outputDir 为 File 类型。
// 但从 com.android.tools.build:gradle:3.4.1 开始 Google 将此类型改为 `Provider<Directory>`。
final def out = VariantCompat.getMergeAssetsTask(variant)?.outputDir
fileDir = File.class.isInstance(out) ? out : out?.get()?.getAsFile()
fileName = config.builtInJsonFileName
}

Expand Down
Loading

0 comments on commit 2c3de71

Please sign in to comment.