diff --git a/.gitignore b/.gitignore
index eaeb95b..508886f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -29,7 +29,7 @@ captures/
# Intellij
*.iml
-.idea
+.idea/
# Keystore files
*.jks
diff --git a/.idea/modules.xml b/.idea/modules.xml
deleted file mode 100644
index be6c363..0000000
--- a/.idea/modules.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/runConfigurations.xml b/.idea/runConfigurations.xml
deleted file mode 100644
index 7f68460..0000000
--- a/.idea/runConfigurations.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
deleted file mode 100644
index 35eb1dd..0000000
--- a/.idea/vcs.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/README.md b/README.md
index cc1e4a9..df73c33 100644
--- a/README.md
+++ b/README.md
@@ -1,133 +1,125 @@
# MicroModule
-Rebuild multiple complete module structures within the module. Each complete module structure we called it MicroModule, Each MicroModule has its own `build.gradle` file where you can add configuration options to publish MicroModule(aar) to Maven and declare MicroModule dependencies. In addition, you can decide which MicroModules participate in the compilation of the module.
+重新定义Android模块结构,在模块内部可以创建多个和模块结构一致的微模块(MicroModule)。每一个MicroModule的结构和Android模块结构保持一致,也会有自己的`build.gradle`。另外,你可以很方便的配置哪些MicroModule参与APK的编译。
## Usage
-### Add MicroModule plugin **classpath** in root project build.gradle:
- buildscript {
- dependencies {
- ...
- classpath 'com.eastwood.tools.plugins:micro-module:1.3.2'
- }
- }
-
-### Apply MicroModule plugin in application or library module build.gradle and add configuration options:
-
- apply plugin: 'micro-module'
- apply plugin: 'com.android.library' // or 'com.android.application'
-
- android {}
+### 在根项目`build.gradle`中添加MicroModule插件依赖:
- microModule {
- ...
- }
-
- dependencies {}
+```
+buildscript {
+ dependencies {
+ ...
+ classpath 'com.eastwood.tools.plugins:micro-module:1.4.0'
+ }
+}
+```
-Apply MicroModule plugin **must before** apply android plugin, and `microModule {}` should between `android {}` and `dependencies {}`.
+### 在`application`或`library`类型的模块`build.gradle`中添加MicroModule插件:
-The MicroModule plugin defines the following methods in `microModule {}`:
-* **`codeCheckEnabled`**--`boolean`
+```
+apply plugin: 'micro-module'
+apply plugin: 'com.android.library' // or 'com.android.application'
- Prevent two non-dependent MicroModules from generating references. Use `codeCheckEnabled` to declared code check enable state, 'true' as default.
+android {}
-* **`includeMain`**--`String`
+microModule {
+ ...
+}
- Declare main MicroModule, affects the package name of the generated R class, and the AndroidManifest.xml merge. if not declared, will be declared as default if file with name `main` exist.
+dependencies {}
+```
-* **`include`**--`String[]`
+注意:MicroModule插件需要添加在android相关插件之前,相关配置`microModule {}` 需要添加在 `android {}` 和 `dependencies {}`之间。
- Declare other MicroModules.
+### microModule属性说明
-* **`export`**--`String[]`
+* **`include`**
- Use `export` to decide which MicroModules participate in the compilation of the module. if not declared, all MicroModules which decleard by `include`, will participate in the compilation of the module.
+ 声明一个或多个MicroModule,类似于`setting.gradle`中的`include`,MicroModule目录名即为MicroModule的名称。
+ ```
+ microModule {
+ include 'p_base', 'p_common'
-*Example 1. build.gradle file of library module in the dome.*
+ // 可以根据条件动态声明
+ if(debug) {
+ include 'debug'
+ } else {
+ include 'debug'
+ }
+ }
+ ```
- microModule {
- codeCheckEnabled true
- include ':p_base'
- include ':p_common'
- include ':p_utils'
- export ':main'
- }
+* **`export`**
-### Declare MicroModule dependencies in MicroModule build.gradle:
-The MicroModule plugin provides a simple method for declaring dependencies on other MicroModules in `dependencies {}`.
+ 配置参与APK编译的MicroModule。如果未配置`export`,则所有`include`的MicroModule都会参与APK编译。
- dependencies {
- implementation microModule(':p_common')
- }
+ ```
+ microModule {
+ include 'feature_A', 'feature_B', 'feature_C'
+ export 'feature_A', 'feature_B'
+ }
+ ```
-The method **`microModule`** has a only `string` parameter, the name of the MicroModule.
+* **`includeMain`**
-You can also declare dependencies on the other third party libraries in `dependencies {}`.
+ 指定主MicroModule。
+ 当前模块的其他MicroModule的`AndroidManifest.xml`,将会合入主MicroModule的`AndroidManifest.xml`,并存放在`build/microModule/merge-manifest/`下。另外,当前模块的R类包名也将由主模块`AndroidManifest.xml`的`package`决定。
-*Example 2. build.gradle file of main MicroModule in the demo.*
+ 默认主MicroModule为目录名为`main`的MicroModule。通过[MicroModule Android Studio插件](#jump)的转换功能,将模块转换成MicroModule格式时,无需指定主模块。转换功能工作只是创建一个`main`目录,并将原先`src`移动到`main`目录下,以及其他操作。
- dependencies {
- implementation fileTree(dir: 'main/libs', include: ['*.jar'])
- implementation 'com.android.support:appcompat-v7:27.1.1'
- implementation 'com.android.support.constraint:constraint-layout:1.1.0'
- implementation microModule(':p_common')
- }
+* **`codeCheckEnabled`**
-### Publish MicroModule(AAR) to Maven repository:
-The MicroModule plugin adds support for compiling single MicroModule into an Android Archive (AAR) file, and publishing AAR file to Maven repository.
+ 是否开启MicroModule代码边界检查,默认不开启检查。
-The MicroModule plugin provides a factory method for creating a maven artifact. After you add configuration option of creating a maven artifact and run gradle sync, the MicroModule plugin will create a relatived upload task which publishing AAR file to Maven repository.
+ 有些场景下可能想使MicroModule在模块中保持独立,其类或资源不被该模块的其他MicroModule引用。代码边界检查在`sync&build`的时候进行,检测到没有依赖而存在引用时,会报错以及停止`sync&build`,并输出相应日志提示。
-*Example 3. Creating a maven artifact.*
+ 开启代码边界检查后,一个模块内的MicroModule之间,需要声明依赖关系。例如:
+ ```
+ // Module build.gradle
- microModule {
- mavenArtifact {
- groupId 'com.eastwood.demo'
- artifactId 'library-base'
- version '1.0.0-SNAPSHOT'
+ microModule {
+ codeCheckEnabled true
- repository {
- url "***"
- authentication(userName: '***', password: '***')
- }
- }
- }
+ include 'p_base', 'p_common'
+ include 'feature_A', 'feature_B'
-
+ export 'feature_A'
+ }
+ // MicroModule feature_A build.gradle
-After publishing MicroModule AAR file to Maven repository, you can use it as a dependency instead of the local source code. All you have to do is add the attribute `useMavenArtifact` and set it to true.
+ dependencies {
+ implementation microModule(':p_base')
+ implementation microModule(':p_common')
+ }
-*Example 4. the complete example of the MicroModule build.gradle file.*
+ // MicroModule feature_B build.gradle
- microModule {
- useMavenArtifact true
- mavenArtifact {
- groupId 'com.eastwood.demo'
- artifactId 'library-base'
- version '1.0.0-SNAPSHOT'
+ dependencies {
+ implementation microModule(':p_base')
+ implementation microModule(':p_common')
+ }
+ ```
- repository {
- url "***"
- authentication(userName: '***', password: '***')
- }
- }
- }
+ 另外MicroModule所需的依赖,也可以在各自的`build.gradle` `dependencies {}`中声明(此处的依赖不在代码边界检查范围之内)。
- dependencies {
- implementation fileTree(dir: 'main/libs', include: ['*.jar'])
- implementation 'com.android.support:appcompat-v7:27.1.1'
- implementation 'com.android.support.constraint:constraint-layout:1.1.0'
+ ```
+ dependencies {
+ implementation fileTree(dir: 'main/libs', include: ['*.jar'])
+ implementation 'com.android.support:appcompat-v7:27.1.1'
+ implementation 'com.android.support.constraint:constraint-layout:1.1.0'
- implementation microModule(':p_common')
- }
+ implementation microModule(':p_base')
+ implementation microModule(':p_common')
+ }
+ ```
-## MicroModule Android Studio Plugin
+## MicroModule Android Studio Plugin
Provides an action which allow you quickly create MicroModule or convert module to MicroModule.
* Right click at module dir, in [New] group, you will find "MicroModule" action.
* Right click at module dir, in [Refactor] group, you will find "Convert to MicroModule" action.
@@ -146,6 +138,9 @@ Provides an action which allow you quickly create MicroModule or convert module
[https://plugins.jetbrains.com/plugin/10785-micromodule](https://plugins.jetbrains.com/plugin/10785-micromodule)
+## Question or Idea
+有问题或想法可以直接加我微信: EastWoodYang
+
## License
```
diff --git a/application/p_base/src/main/java/com/eastwood/demo/application/base/Base.java b/application/p_base/src/main/java/com/eastwood/demo/application/base/Base.java
index 7cf0a30..937e76c 100644
--- a/application/p_base/src/main/java/com/eastwood/demo/application/base/Base.java
+++ b/application/p_base/src/main/java/com/eastwood/demo/application/base/Base.java
@@ -1,5 +1,7 @@
package com.eastwood.demo.application.base;
+import com.eastwood.demo.application.R;
+
/**
* @author eastwood
* createDate: 2018-05-29
diff --git a/application/p_common/src/main/java/com/eastwood/demo/application/common/Common.java b/application/p_common/src/main/java/com/eastwood/demo/application/common/Common.java
index babc822..db55e08 100644
--- a/application/p_common/src/main/java/com/eastwood/demo/application/common/Common.java
+++ b/application/p_common/src/main/java/com/eastwood/demo/application/common/Common.java
@@ -1,5 +1,7 @@
package com.eastwood.demo.application.common;
+import com.eastwood.demo.application.R;
+
/**
* @author eastwood
* createDate: 2018-11-26
diff --git a/application/p_home/src/main/java/com/eastwood/demo/application/home/Home.java b/application/p_home/src/main/java/com/eastwood/demo/application/home/Home.java
index 8b80e70..c198f64 100644
--- a/application/p_home/src/main/java/com/eastwood/demo/application/home/Home.java
+++ b/application/p_home/src/main/java/com/eastwood/demo/application/home/Home.java
@@ -1,5 +1,7 @@
package com.eastwood.demo.application.home;
+import com.eastwood.demo.application.R;
+
/**
* @author eastwood
* createDate: 2018-11-26
diff --git a/build.gradle b/build.gradle
index 51b2ff4..fa1eea0 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1,15 +1,15 @@
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
- ext.kotlin_version = '1.3.0'
+ ext.kotlin_version = '1.3.61'
repositories {
google()
jcenter()
}
dependencies {
- classpath 'com.android.tools.build:gradle:3.3.0'
+ classpath 'com.android.tools.build:gradle:3.2.0'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
- classpath 'com.eastwood.tools.plugins:micro-module:1.3.0'
+ classpath 'com.eastwood.tools.plugins:micro-module:1.4.0'
}
}
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index ce005fe..85dd5ba 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
-#Tue Jan 15 22:21:09 CST 2019
+#Wed Jun 17 11:54:04 CST 2020
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.1-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-5.1.1-all.zip
diff --git a/kotlin/build.gradle b/kotlin/build.gradle
index 7d2bbdf..cd3b8bf 100644
--- a/kotlin/build.gradle
+++ b/kotlin/build.gradle
@@ -2,7 +2,6 @@ apply plugin: 'micro-module'
apply plugin: 'com.android.library'
apply plugin: 'kotlin-android'
-
apply plugin: 'kotlin-android-extensions'
android {
@@ -23,8 +22,15 @@ android {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
+
+ preview {
+
+ }
}
+ androidExtensions {
+ experimental = true
+ }
}
microModule {
diff --git a/kotlin/main/build.gradle b/kotlin/main/build.gradle
index 4976a15..bade2d6 100644
--- a/kotlin/main/build.gradle
+++ b/kotlin/main/build.gradle
@@ -1,19 +1,6 @@
// MicroModule build file where you can add configuration options to publish MicroModule(aar) to Maven
// and declare MicroModule dependencies.
-microModule {
- mavenArtifact {
- groupId 'com.eastwood.demo'
- artifactId 'kotlin-main'
- version '1.0.0-SNAPSHOT'
-
- repository {
- url "***"
- authentication(userName: '***', password: '***')
- }
- }
-}
-
dependencies {
implementation fileTree(dir: 'main/libs', include: ['*.jar'])
// implementation microModule(':p_common')
diff --git a/kotlin/main/src/main/java/com/eastwood/demo/kotlin/Test.kt b/kotlin/main/src/main/java/com/eastwood/demo/kotlin/Test.kt
index 507f8d7..27aeeea 100644
--- a/kotlin/main/src/main/java/com/eastwood/demo/kotlin/Test.kt
+++ b/kotlin/main/src/main/java/com/eastwood/demo/kotlin/Test.kt
@@ -9,7 +9,7 @@ class Test {
fun test() {
// can't use [R.string.kotlin_common] which from microModule ':p_common'.
- var i = R.string.kotlin_common
+// var i = R.string.kotlin_common
}
}
\ No newline at end of file
diff --git a/kotlin/main/src/main/kotlin/com/eastwood/demo/kotlin/Test1.kt b/kotlin/main/src/main/kotlin/com/eastwood/demo/kotlin/Test1.kt
index 6490979..5b8cec8 100644
--- a/kotlin/main/src/main/kotlin/com/eastwood/demo/kotlin/Test1.kt
+++ b/kotlin/main/src/main/kotlin/com/eastwood/demo/kotlin/Test1.kt
@@ -9,7 +9,7 @@ class Test1 {
fun test() {
// can't use [R.string.kotlin_common] which from microModule ':p_common'.
- var i = R.string.kotlin_common
+// var i = R.string.kotlin_common
}
}
\ No newline at end of file
diff --git a/kotlin/p_common/build.gradle b/kotlin/p_common/build.gradle
index 32679d4..dd5852c 100644
--- a/kotlin/p_common/build.gradle
+++ b/kotlin/p_common/build.gradle
@@ -1,22 +1,6 @@
// MicroModule build file where you can add configuration options to publish MicroModule(aar) to Maven
// and declare MicroModule dependencies.
-microModule {
-
- useMavenArtifact false
-
- mavenArtifact {
- groupId 'com.eastwood.demo'
- artifactId 'kotlin-p_common'
- version '1.0.0-SNAPSHOT'
-
- repository {
- url "***"
- authentication(userName: '***', password: '***')
- }
- }
-}
-
dependencies {
implementation fileTree(dir: 'p_common/libs', include: ['*.jar'])
}
diff --git a/kotlin/p_common/src/main/java/com/eastwood/demo/kotlin/common/Common.kt b/kotlin/p_common/src/main/java/com/eastwood/demo/kotlin/common/Common.kt
index 4b20a8b..6ecf4a1 100644
--- a/kotlin/p_common/src/main/java/com/eastwood/demo/kotlin/common/Common.kt
+++ b/kotlin/p_common/src/main/java/com/eastwood/demo/kotlin/common/Common.kt
@@ -1,5 +1,7 @@
package com.eastwood.demo.kotlin.common
+import com.eastwood.demo.kotlin.R
+
/**
*
* @author eastwood
@@ -8,6 +10,7 @@ package com.eastwood.demo.kotlin.common
class Common {
fun test() {
+
var i = R.string.kotlin_common
}
diff --git a/kotlin/p_common/src/main/kotlin/com/eastwood/demo/kotlin/common/Common1.kt b/kotlin/p_common/src/main/kotlin/com/eastwood/demo/kotlin/common/Common1.kt
index 29940e4..d44519b 100644
--- a/kotlin/p_common/src/main/kotlin/com/eastwood/demo/kotlin/common/Common1.kt
+++ b/kotlin/p_common/src/main/kotlin/com/eastwood/demo/kotlin/common/Common1.kt
@@ -1,5 +1,7 @@
package com.eastwood.demo.kotlin.common
+import com.eastwood.demo.kotlin.R
+
/**
*
* @author eastwood
diff --git a/library/main/build.gradle b/library/main/build.gradle
index c490f67..39c415e 100644
--- a/library/main/build.gradle
+++ b/library/main/build.gradle
@@ -1,19 +1,3 @@
-microModule {
-
- useMavenArtifact false
-
- mavenArtifact {
- groupId 'com.eastwood.demo'
- artifactId 'library-main'
- version '1.0.0-SNAPSHOT'
-
- repository {
- url "***"
- authentication(userName: '***', password: '***')
- }
- }
-
-}
dependencies {
implementation microModule(':p_common')
diff --git a/library/p_base/build.gradle b/library/p_base/build.gradle
index a5e7e78..5fbab79 100644
--- a/library/p_base/build.gradle
+++ b/library/p_base/build.gradle
@@ -1,18 +1,3 @@
-microModule {
-
- useMavenArtifact false
-
- mavenArtifact {
- groupId 'com.eastwood.demo'
- artifactId 'library-p_base'
- version '1.0.0-SNAPSHOT'
-
- repository {
- url "***"
- authentication(userName: '***', password: '***')
- }
- }
-}
dependencies {
diff --git a/library/p_base/src/main/java/com/eastwood/demo/library/base/Base.java b/library/p_base/src/main/java/com/eastwood/demo/library/base/Base.java
index 0436123..f6d973e 100644
--- a/library/p_base/src/main/java/com/eastwood/demo/library/base/Base.java
+++ b/library/p_base/src/main/java/com/eastwood/demo/library/base/Base.java
@@ -1,5 +1,7 @@
package com.eastwood.demo.library.base;
+import com.eastwood.demo.library.R;
+
/**
* @author eastwood
* createDate: 2018-11-09
diff --git a/library/p_common/build.gradle b/library/p_common/build.gradle
index 262747f..e9f1107 100644
--- a/library/p_common/build.gradle
+++ b/library/p_common/build.gradle
@@ -1,18 +1,3 @@
-microModule {
-
- useMavenArtifact false
-
- mavenArtifact {
- groupId 'com.eastwood.demo'
- artifactId 'library-p_common'
- version '1.0.0-SNAPSHOT'
-
- repository {
- url "***"
- authentication(userName: '***', password: '***')
- }
- }
-}
dependencies {
implementation microModule(':p_base')
diff --git a/library/p_common/src/main/java/com/eastwood/demo/library/common/Common.java b/library/p_common/src/main/java/com/eastwood/demo/library/common/Common.java
index d3409e4..a62be15 100644
--- a/library/p_common/src/main/java/com/eastwood/demo/library/common/Common.java
+++ b/library/p_common/src/main/java/com/eastwood/demo/library/common/Common.java
@@ -1,5 +1,7 @@
package com.eastwood.demo.library.common;
+import com.eastwood.demo.library.R;
+
/**
* @author eastwood
* createDate: 2018-11-09
diff --git a/library/p_utils/build.gradle b/library/p_utils/build.gradle
index b3a0653..5fbab79 100644
--- a/library/p_utils/build.gradle
+++ b/library/p_utils/build.gradle
@@ -1,18 +1,3 @@
-microModule {
-
- useMavenArtifact false
-
- mavenArtifact {
- groupId 'com.eastwood.demo'
- artifactId 'library-p_util'
- version '1.0.0-SNAPSHOT'
-
- repository {
- url "***"
- authentication(userName: '***', password: '***')
- }
- }
-}
dependencies {
diff --git a/library/p_utils/src/main/java/com/eastwood/demo/library/utils/Utils.java b/library/p_utils/src/main/java/com/eastwood/demo/library/utils/Utils.java
index 56d3a0e..04cf3ab 100644
--- a/library/p_utils/src/main/java/com/eastwood/demo/library/utils/Utils.java
+++ b/library/p_utils/src/main/java/com/eastwood/demo/library/utils/Utils.java
@@ -1,5 +1,7 @@
package com.eastwood.demo.library.utils;
+import com.eastwood.demo.library.R;
+
/**
* @author eastwood
* createDate: 2018-05-29
diff --git a/micro-module/build.gradle b/micro-module/build.gradle
index 473a93f..48668a4 100644
--- a/micro-module/build.gradle
+++ b/micro-module/build.gradle
@@ -19,7 +19,7 @@ apply plugin: 'maven'
def groupId = 'com.eastwood.tools.plugins'
def artifactId = 'micro-module'
-def version = '1.3.2'
+def version = '1.4.0'
def localReleaseDest = "${buildDir}/release/${version}"
diff --git a/micro-module/src/main/groovy/com/eastwood/tools/plugins/GenerateMicroModuleRFileTask.groovy b/micro-module/src/main/groovy/com/eastwood/tools/plugins/GenerateMicroModuleRFileTask.groovy
deleted file mode 100644
index a162f17..0000000
--- a/micro-module/src/main/groovy/com/eastwood/tools/plugins/GenerateMicroModuleRFileTask.groovy
+++ /dev/null
@@ -1,264 +0,0 @@
-package com.eastwood.tools.plugins
-
-import com.android.build.gradle.api.BaseVariant
-import com.eastwood.tools.plugins.core.MicroModule
-import com.eastwood.tools.plugins.core.MicroModuleInfo
-import com.eastwood.tools.plugins.core.Utils
-import org.gradle.api.DefaultTask
-import org.gradle.api.Project
-import org.gradle.api.Task
-import org.gradle.api.tasks.TaskAction
-import org.objectweb.asm.*
-
-import java.util.jar.JarEntry
-import java.util.jar.JarFile
-import java.util.jar.JarOutputStream
-import java.util.zip.ZipEntry
-
-class GenerateMicroModuleRFileTask extends DefaultTask {
-
- public final static List SUPPORT_RESOURCE_TYPE = ["anim", "array", "attr", "bool", "color", "dimen", "mipmap",
- "drawable", "id", "integer", "layout", "menu", "plurals", "string", "style", "styleable"]
-
- String packageName
- File outputDir
- MicroModuleInfo microModuleInfo
-
- boolean appliedKotlinPlugin
- BaseVariant variant
- boolean generatedMicroModuleRClass
-
- @TaskAction
- def run() {
- generatedMicroModuleRClass = true
- if (appliedKotlinPlugin) {
- File symbolFile = getSymbolFile(getProject(), variant)
- if (symbolFile.exists()) {
- List resourceTypeList = getResourceTypeList(symbolFile)
- generateVariantMicroModuleRClass(getProject(), microModuleInfo, packageName, outputDir, true, resourceTypeList)
- } else {
- generateVariantMicroModuleRClass(getProject(), microModuleInfo, packageName, outputDir, true, SUPPORT_RESOURCE_TYPE)
- }
- } else {
- generateVariantMicroModuleRClass(getProject(), microModuleInfo, packageName, outputDir, false, null)
- }
- }
-
- void revertMicroModuleRClass() {
- generateVariantMicroModuleRClass(getProject(), microModuleInfo, packageName, outputDir, true, SUPPORT_RESOURCE_TYPE)
- }
-
- private static File getSymbolFile(Project project, BaseVariant variant) {
- File symbolFile = null
- def task = getVariantGenerateRFileTask(project, variant)
- if (task != null) {
- task.outputs.files.each {
- if (it.absolutePath.endsWith("R.txt")) {
- symbolFile = it
- }
- }
- }
- return symbolFile
- }
-
- private static Task getVariantGenerateRFileTask(Project project, BaseVariant variant) {
- def taskName = "process${variant.name.capitalize()}Resources"
- def task = project.tasks.findByName(taskName)
- if (task == null) {
- taskName = "generate${variant.name.capitalize()}RFile"
- task = project.tasks.findByName(taskName)
- }
- return task
- }
-
- private static List getResourceTypeList(File symbolFile) {
- List resourceTypeList = new ArrayList<>()
- String currentType = null
- String resourceTypeTemp
- symbolFile.readLines().each {
- resourceTypeTemp = it.split(" ")[1]
- if (resourceTypeTemp != currentType) {
- currentType = resourceTypeTemp
- resourceTypeList.add(currentType)
- }
- }
- return resourceTypeList
- }
-
- private static void generateVariantMicroModuleRClass(Project project, MicroModuleInfo microModuleInfo, String packageName, File outputDir, boolean appliedKotlinPlugin, List resourceType) {
- def packageNames = []
- microModuleInfo.includeMicroModules.each {
- MicroModule microModule = it.value
- def microManifestFile = new File(microModule.microModuleDir, MicroModulePlugin.MAIN_MANIFEST_PATH)
- if (!microManifestFile.exists()) {
- return
- }
- def microModulePackageName = Utils.getAndroidManifestPackageName(microManifestFile)
- if (microModulePackageName == null || packageNames.contains(microModulePackageName) || microModulePackageName == packageName) {
- return
- }
-
- packageNames << microModulePackageName
- def RPath = outputDir.canonicalPath + "/" + microModulePackageName.replace(".", "/")
- File RFile = project.file(RPath + "/R.java")
- project.file(RPath).mkdirs()
-
- if (appliedKotlinPlugin) {
- def RJava = "package " + microModulePackageName + ";\n\n/** This class is generated by micro-module plugin, DO NOT MODIFY. */\npublic class R extends " + packageName + ".R {\n\n";
- resourceType.each {
- RJava += " public static class $it extends $packageName" + ".R." + "$it {}\n"
- }
- RJava += "\n}"
- RFile.setText(RJava)
- } else {
- RFile.setText("package " + microModulePackageName + ";\n\n/** This class is generated by micro-module plugin, DO NOT MODIFY. */\npublic class R extends " + packageName + ".R {\n\n}")
- }
- }
- }
-
- static void modifyModuleRFile(Project project, BaseVariant variant, String packageName, MicroModuleInfo microModuleInfo, File outputDir, boolean appliedKotlinPlugin) {
- def task = getVariantGenerateRFileTask(project, variant)
- if (task == null) return
-
- task.doLast {
- File RFile = null
- task.outputs.files.each {
- if (it.isDirectory()) {
- def RJava = new File(it, packageName.replace(".", "/") + "/R.java")
- if (RJava.exists()) {
- RFile = RJava
- }
- } else if (it.name == "R.jar") {
- RFile = it
- }
- }
-
- if (RFile == null) {
- throw new RuntimeException("Can not find R file.")
- }
-
- modifyRFileAccess(RFile, packageName, appliedKotlinPlugin)
-
- if (appliedKotlinPlugin) {
- File symbolFile = getSymbolFile(project, variant)
- if (symbolFile.exists()) {
- List resourceTypeList = getResourceTypeList(symbolFile)
- generateVariantMicroModuleRClass(project, microModuleInfo, packageName, outputDir, true, resourceTypeList)
- }
- }
- }
- }
-
- private static void modifyRFileAccess(File RFile, String packageName, boolean appliedKotlinPlugin) {
- if (RFile.name.endsWith('.java')) {
- modifyRJavaAccess(RFile, appliedKotlinPlugin)
- } else {
- modifyRClassAccess(RFile, packageName)
- }
- }
-
- private static void modifyRJavaAccess(File RFile, boolean appliedKotlinPlugin) {
- if (appliedKotlinPlugin) {
- Map resourceType = new HashMap<>()
- def newR = RFile.text.replace(" final class ", " class ").replace("private R() {}", "")
- def resourcesPattern = /static class ([a-z]+) \{/
- def matcher = (newR =~ resourcesPattern)
- while (matcher.find()) {
- resourceType.put(matcher.group(1), null)
- }
- resourceType.keySet().each {
- newR = newR.replace("private $it() {}", "")
- }
- RFile.write(newR)
- } else {
- def newR = RFile.text.replace("public final class R", "public class R").replace("private R() {}", "")
- RFile.write(newR)
- }
- }
-
- private static void modifyRClassAccess(File RFile, String packageName) {
- String targetRClass = packageName.replace(".", "/") + "/R"
- Map tempModifiedClassByteMap = new HashMap()
- JarFile jarFile = new JarFile(RFile)
- Enumeration jarEntryEnumeration = jarFile.entries()
- while (jarEntryEnumeration.hasMoreElements()) {
- JarEntry jarEntry = jarEntryEnumeration.nextElement()
- String filename = jarEntry.getName()
- if (!filename.startsWith(targetRClass)) {
- continue
- }
-
- InputStream inputStream = jarFile.getInputStream(jarEntry)
- if (inputStream != null) {
- byte[] bytes = modifyRClassAccess(inputStream.bytes)
- if (bytes != null) {
- tempModifiedClassByteMap.put(filename, bytes)
- }
- }
- inputStream.close()
- }
-
- if (tempModifiedClassByteMap.size() != 0) {
- File tempJar = new File(RFile.absolutePath.replace('.jar', 'temp.jar'))
- if (tempJar.exists())
- tempJar.delete()
-
- jarEntryEnumeration = jarFile.entries()
- JarOutputStream jarOutputStream = new JarOutputStream(new FileOutputStream(tempJar))
- while (jarEntryEnumeration.hasMoreElements()) {
- JarEntry jarEntry = jarEntryEnumeration.nextElement()
- String filename = jarEntry.getName()
- ZipEntry zipEntry = new ZipEntry(filename)
- jarOutputStream.putNextEntry(zipEntry)
- if (tempModifiedClassByteMap.containsKey(filename)) {
- jarOutputStream.write(tempModifiedClassByteMap.get(filename))
- } else {
- InputStream inputStream = jarFile.getInputStream(jarEntry)
- jarOutputStream.write(inputStream.bytes)
- inputStream.close()
- }
- jarOutputStream.closeEntry()
- }
- jarOutputStream.close()
- jarFile.close()
-
- FileOutputStream outputStream = new FileOutputStream(RFile)
- outputStream.write(tempJar.bytes)
- outputStream.close()
- tempJar.delete()
- } else {
- jarFile.close()
- }
- }
-
- private static byte[] modifyRClassAccess(byte[] bytes) {
- ClassWriter classWriter = new ClassWriter(0)
- RClassAdapter targetClassAdapter = new RClassAdapter(Opcodes.ASM5, classWriter)
- ClassReader classReader = new ClassReader(bytes)
- classReader.accept(targetClassAdapter, 0)
- return classWriter.toByteArray()
- }
-
- private static class RClassAdapter extends ClassVisitor {
-
- RClassAdapter(int api, ClassVisitor cv) {
- super(api, cv)
- }
-
- @Override
- void visit(int version, int access, String name, String signature, String superName, String[] interfaces) {
- super.visit(version, Opcodes.ACC_PUBLIC + Opcodes.ACC_SUPER, name, signature, superName, interfaces)
- }
-
- @Override
- MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) {
- return super.visitMethod(Opcodes.ACC_PUBLIC, name, desc, signature, exceptions)
- }
-
- @Override
- void visitInnerClass(String name, String outerName, String innerName, int access) {
- super.visitInnerClass(name, outerName, innerName, Opcodes.ACC_PUBLIC + Opcodes.ACC_STATIC)
- }
- }
-
-}
diff --git a/micro-module/src/main/groovy/com/eastwood/tools/plugins/MicroModulePlugin.groovy b/micro-module/src/main/groovy/com/eastwood/tools/plugins/MicroModulePlugin.groovy
index d5c2421..5e94f2b 100644
--- a/micro-module/src/main/groovy/com/eastwood/tools/plugins/MicroModulePlugin.groovy
+++ b/micro-module/src/main/groovy/com/eastwood/tools/plugins/MicroModulePlugin.groovy
@@ -24,18 +24,11 @@ import org.gradle.api.tasks.compile.JavaCompile
class MicroModulePlugin implements Plugin {
- public final static String MAIN_MANIFEST_PATH = '/src/main/AndroidManifest.xml'
-
- private final static String UPLOAD_AAR_TASK_PREFIX = 'uploadMicroModule'
- private final static String EXCLUDE_BUILD_CONFIG = '**/BuildConfig.java'
-
private final static String NORMAL = 'normal'
- private final static String UPLOAD_AAR = 'upload_aar'
private final static String ASSEMBLE_OR_GENERATE = 'assemble_or_generate'
private final static String APPLY_NORMAL_MICRO_MODULE_SCRIPT = 'apply_normal_micro_module_script'
private final static String APPLY_INCLUDE_MICRO_MODULE_SCRIPT = 'apply_include_micro_module_script'
- private final static String APPLY_UPLOAD_MICRO_MODULE_SCRIPT = 'apply_upload_micro_module_script'
private final static String APPLY_EXPORT_MICRO_MODULE_SCRIPT = 'apply_export_micro_module_script'
private final static BuildListener buildListener = new BuildListener() {
@@ -75,7 +68,7 @@ class MicroModulePlugin implements Plugin {
microModuleInfo += ' \n'
microModulePlugin.microModuleInfo.includeMicroModules.each {
MicroModule microModule = it.value
- microModuleInfo += ' \n'
+ microModuleInfo += ' \n'
}
microModuleInfo += ' \n'
}
@@ -89,8 +82,6 @@ class MicroModulePlugin implements Plugin {
Project project
String startTaskState = NORMAL
- boolean executeUploadTask
- String uploadMicroModuleName
MicroModuleInfo microModuleInfo
ProductFlavorInfo productFlavorInfo
@@ -100,6 +91,8 @@ class MicroModulePlugin implements Plugin {
boolean appliedLibraryPlugin
+ boolean clearedOriginSourceSets
+
void apply(Project project) {
this.project = project
this.microModuleInfo = new MicroModuleInfo(project)
@@ -110,19 +103,7 @@ class MicroModulePlugin implements Plugin {
if (project.gradle.getStartParameter().taskNames.size() == 0) {
startTaskState = NORMAL
} else {
- project.gradle.getStartParameter().taskNames.each {
- if (it.startsWith(UPLOAD_AAR_TASK_PREFIX)) {
- startTaskState = UPLOAD_AAR
- uploadMicroModuleName = ':' + it.substring(it.indexOf('[') + 1, it.lastIndexOf(']'))
- }
- }
- if (startTaskState != UPLOAD_AAR) {
- startTaskState = ASSEMBLE_OR_GENERATE
- }
- }
-
- if (startTaskState == UPLOAD_AAR) {
- executeUploadTask = project.gradle.getStartParameter().getProjectDir() == project.getProjectDir()
+ startTaskState = ASSEMBLE_OR_GENERATE
}
if (startTaskState != NORMAL) {
@@ -132,8 +113,7 @@ class MicroModulePlugin implements Plugin {
if (applyScriptState == APPLY_INCLUDE_MICRO_MODULE_SCRIPT) {
configuration.dependencies.remove(it)
return
- } else if (applyScriptState == APPLY_UPLOAD_MICRO_MODULE_SCRIPT
- || applyScriptState == APPLY_NORMAL_MICRO_MODULE_SCRIPT
+ } else if (applyScriptState == APPLY_NORMAL_MICRO_MODULE_SCRIPT
|| applyScriptState == APPLY_EXPORT_MICRO_MODULE_SCRIPT) {
return
} else if (currentMicroModule == null && startTaskState == ASSEMBLE_OR_GENERATE) {
@@ -152,19 +132,23 @@ class MicroModulePlugin implements Plugin {
@Override
void addIncludeMicroModule(MicroModule microModule, boolean mainMicroModule) {
- if (startTaskState == UPLOAD_AAR) {
- if (microModule.name == uploadMicroModuleName) {
- microModuleInfo.setMainMicroModule(microModule)
- } else {
- microModuleInfo.addIncludeMicroModule(microModule)
- }
+ if (mainMicroModule) {
+ microModuleInfo.setMainMicroModule(microModule)
} else {
- if (mainMicroModule) {
- microModuleInfo.setMainMicroModule(microModule)
- } else {
- microModuleInfo.addIncludeMicroModule(microModule)
+ microModuleInfo.addIncludeMicroModule(microModule)
+ }
+
+ if(!clearedOriginSourceSets) {
+ productFlavorInfo = new ProductFlavorInfo(project)
+ clearedOriginSourceSets = true
+ clearOriginSourceSet()
+
+ if(microModuleInfo.mainMicroModule != null) {
+ addMicroModuleSourceSet(microModuleInfo.mainMicroModule)
}
}
+
+ addMicroModuleSourceSet(microModule)
}
@Override
@@ -189,30 +173,10 @@ class MicroModulePlugin implements Plugin {
MicroModule microModule = microModuleInfo.getMicroModule(path)
def result = []
- if (startTaskState == UPLOAD_AAR) {
- if (microModule.useMavenArtifact) {
- result = microModule.mavenArtifact.groupId + ':' + microModule.mavenArtifact.artifactId + ':' + microModule.mavenArtifact.version
- } else {
- throw new GradleException("make sure the MicroModule '" + path + "' has been uploaded to Maven and add 'microModule { useMavenArtifact true }' to its build.gradle. " +
- "\nif not, add follow config to its build.gradle and upload :\n\nmicroModule {\n" +
- "\n" + " useMavenArtifact true\n" + "\n" + " mavenArtifact {\n" + " groupId ...\n" + " artifactId ...\n" +
- " version ...\n" + " }\n" + "\n" + " mavenRepository {\n" + " url ...\n" +
- " authentication(userName: ..., password: ...)\n" + " }\n" + "\n" +
- "}\n\n* Get more help at https://github.com/EastWoodYang/MicroModule")
- }
- } else if (startTaskState == ASSEMBLE_OR_GENERATE) {
- if (microModule.useMavenArtifact) {
- checkMicroModuleMavenArtifact(microModule.name)
-
- if (!microModule.addDependency) {
- MavenArtifact mavenArtifact = microModule.mavenArtifact
- result = mavenArtifact.groupId + ':' + mavenArtifact.artifactId + ':' + mavenArtifact.version
- }
- } else {
- addMicroModuleSourceSet(microModule)
- applyMicroModuleScript(microModule)
- microModule.appliedScript = true
- }
+ if (startTaskState == ASSEMBLE_OR_GENERATE) {
+ addMicroModuleSourceSet(microModule)
+ applyMicroModuleScript(microModule)
+ microModule.appliedScript = true
}
return result
}
@@ -240,8 +204,6 @@ class MicroModulePlugin implements Plugin {
baseVariants = libraryExtension.libraryVariants
isLibrary = true
}
- def microManifestFile = new File(microModuleInfo.mainMicroModule.microModuleDir, MAIN_MANIFEST_PATH)
- def mainPackageName = Utils.getAndroidManifestPackageName(microManifestFile)
baseVariants.all { BaseVariant variant ->
if (microModuleExtension.codeCheckEnabled) {
@@ -260,59 +222,6 @@ class MicroModulePlugin implements Plugin {
checkMicroModuleBoundary(taskNamePrefix, variant.buildType.name, null, sourceFolders)
}
}
-
- if (startTaskState == UPLOAD_AAR) {
- return
- }
-
- boolean appliedKotlinPlugin = project.pluginManager.hasPlugin('kotlin-android')
- File outputDir = new File(project.buildDir, "generated/source/microModule/${variant.dirName}")
- GenerateMicroModuleRFileTask.modifyModuleRFile(project, variant, mainPackageName, microModuleInfo, outputDir, appliedKotlinPlugin)
-
- variant.outputs.all { BaseVariantOutput output ->
- String generateMicroModuleRFileTaskName = "generate${variant.name.capitalize()}MicroModuleRFile"
- GenerateMicroModuleRFileTask task = project.tasks.findByName(generateMicroModuleRFileTaskName)
- if (task != null) return
-
- task = project.tasks.create("generate${variant.name.capitalize()}MicroModuleRFile", GenerateMicroModuleRFileTask)
- task.packageName = mainPackageName
- task.microModuleInfo = microModuleInfo
- task.outputDir = outputDir
- task.appliedKotlinPlugin = appliedKotlinPlugin
- task.variant = variant
- variant.registerJavaGeneratingTask(task, outputDir)
-
- if (appliedKotlinPlugin) {
- project.gradle.addBuildListener(new BuildListener() {
- @Override
- void buildStarted(Gradle gradle) {
-
- }
-
- @Override
- void settingsEvaluated(Settings settings) {
-
- }
-
- @Override
- void projectsLoaded(Gradle gradle) {
-
- }
-
- @Override
- void projectsEvaluated(Gradle gradle) {
-
- }
-
- @Override
- void buildFinished(BuildResult buildResult) {
- if (task.generatedMicroModuleRClass) {
- task.revertMicroModuleRClass()
- }
- }
- })
- }
- }
}
}
})
@@ -324,30 +233,16 @@ class MicroModulePlugin implements Plugin {
throw new GradleException("the main MicroModule could not be found in ${project.getDisplayName()}.")
}
- if (startTaskState == UPLOAD_AAR && !executeUploadTask) return
-
appliedLibraryPlugin = project.pluginManager.hasPlugin('com.android.library')
productFlavorInfo = new ProductFlavorInfo(project)
- microModuleExtension.onMavenArtifactListener = new OnMavenArtifactListener() {
- @Override
- void onUseMavenArtifactChanged(boolean value) {
- currentMicroModule.useMavenArtifact = value
- }
-
- @Override
- void onMavenArtifactChanged(MavenArtifact artifact) {
- currentMicroModule.mavenArtifact = artifact
- }
- }
applyScriptState = APPLY_INCLUDE_MICRO_MODULE_SCRIPT
microModuleInfo.includeMicroModules.each {
MicroModule microModule = it.value
microModuleInfo.dependencyGraph.add(microModule.name)
applyMicroModuleScript(microModule)
}
- microModuleExtension.onMavenArtifactListener = null
clearOriginSourceSet()
if (startTaskState == ASSEMBLE_OR_GENERATE) {
@@ -366,44 +261,22 @@ class MicroModulePlugin implements Plugin {
hasExportMainMicroModule = true
}
- if (microModule.useMavenArtifact) {
- checkMicroModuleMavenArtifact(it)
- if (microModule.addDependency) return
-
- MavenArtifact mavenArtifact = microModule.mavenArtifact
- project.dependencies.add('api', mavenArtifact.groupId + ':' + mavenArtifact.artifactId + ':' + mavenArtifact.version)
- microModule.addDependency = true
- } else {
- if (microModule.appliedScript) return
+ if (microModule.appliedScript) return
- addMicroModuleSourceSet(microModule)
- applyMicroModuleScript(microModule)
- microModule.appliedScript = true
- }
+ addMicroModuleSourceSet(microModule)
+ applyMicroModuleScript(microModule)
+ microModule.appliedScript = true
}
}
if (!hasExportMainMicroModule) {
throw new GradleException("the main MicroModule '${microModuleInfo.mainMicroModule.name}' is not in the export list.")
}
- } else if (startTaskState == UPLOAD_AAR) {
- applyScriptState = APPLY_UPLOAD_MICRO_MODULE_SCRIPT
- MicroModule mainMicroModule = microModuleInfo.mainMicroModule
- checkMicroModuleMavenArtifact(mainMicroModule.name)
-
- addMicroModuleSourceSet(mainMicroModule)
- createUploadMicroModuleAarTask(mainMicroModule)
- applyMicroModuleScript(mainMicroModule)
-
- if (microModuleInfo.mainMicroModule.useMavenArtifact) {
- excludeBuildConfigFile()
- }
} else {
applyScriptState = APPLY_NORMAL_MICRO_MODULE_SCRIPT
microModuleInfo.includeMicroModules.each {
MicroModule microModule = it.value
addMicroModuleSourceSet(microModule)
- createUploadMicroModuleAarTask(microModule)
applyMicroModuleScript(microModule)
}
}
@@ -413,9 +286,7 @@ class MicroModulePlugin implements Plugin {
project.tasks.preBuild.doFirst {
clearOriginSourceSet()
- if (startTaskState == UPLOAD_AAR) {
- addMicroModuleSourceSet(microModuleInfo.mainMicroModule)
- } else if (startTaskState == ASSEMBLE_OR_GENERATE) {
+ if (startTaskState == ASSEMBLE_OR_GENERATE) {
microModuleInfo.includeMicroModules.each {
MicroModule microModule = it.value
if (microModule.appliedScript) {
@@ -432,18 +303,6 @@ class MicroModulePlugin implements Plugin {
}
}
- def checkMicroModuleMavenArtifact(String name) {
- microModuleInfo.dependencyGraph.bfsDistance(name).each {
- if (it.value == null || it.value == 0) return
-
- MicroModule childMicroModule = microModuleInfo.getMicroModule(it.key)
- if (!childMicroModule.useMavenArtifact) {
- throw new GradleException("MicroModule '${childMicroModule.name}' should use maven artifact.")
- }
- childMicroModule.addDependency = true
- }
- }
-
def generateAndroidManifest() {
if ((startTaskState == ASSEMBLE_OR_GENERATE || !microModuleInfo.exportMicroModules.isEmpty()) && isMainSourceSetEmpty()) {
setMainSourceSetManifest()
@@ -513,15 +372,13 @@ class MicroModulePlugin implements Plugin {
ManifestMerger2.Invoker invoker = new ManifestMerger2.Invoker(mainManifestFile, logger, mergeType, documentType)
invoker.withFeatures(ManifestMerger2.Invoker.Feature.NO_PLACEHOLDER_REPLACEMENT)
- if (startTaskState != UPLOAD_AAR) {
- microModuleInfo.includeMicroModules.each {
- MicroModule microModule = it.value
- if (startTaskState == ASSEMBLE_OR_GENERATE && !microModule.appliedScript) return
- if (microModule.name == microModuleInfo.mainMicroModule.name) return
- def microManifestFile = new File(microModule.microModuleDir, "/src/${variantName}/AndroidManifest.xml")
- if (microManifestFile.exists()) {
- invoker.addLibraryManifest(microManifestFile)
- }
+ microModuleInfo.includeMicroModules.each {
+ MicroModule microModule = it.value
+ if (startTaskState == ASSEMBLE_OR_GENERATE && !microModule.appliedScript) return
+ if (microModule.name == microModuleInfo.mainMicroModule.name) return
+ def microManifestFile = new File(microModule.microModuleDir, "/src/${variantName}/AndroidManifest.xml")
+ if (microManifestFile.exists()) {
+ invoker.addLibraryManifest(microManifestFile)
}
}
@@ -726,64 +583,6 @@ class MicroModulePlugin implements Plugin {
}
}
- def createUploadMicroModuleAarTask(MicroModule microModule) {
- if (!appliedLibraryPlugin || microModule.mavenArtifact == null) return
-
- def taskName = UPLOAD_AAR_TASK_PREFIX + '[' + microModule.microModuleDir.name + ']aar'
- UploadAarTask task = project.getTasks().create(taskName, UploadAarTask.class)
- task.setMicroModule(microModule)
- task.setGroup('upload')
-
- if (microModule.name == uploadMicroModuleName) {
- project.pluginManager.apply('maven')
- project.uploadArchives {
- repositories {
- mavenDeployer {
- MavenArtifact mavenArtifact = microModule.mavenArtifact
- MavenRepository mavenRepository = mavenArtifact.repository
- repository(url: mavenRepository.url) {
- if (mavenRepository.authentication != null) {
- authentication(mavenRepository.authentication)
- }
- }
-
- pom.project {
- groupId mavenArtifact.groupId
- artifactId mavenArtifact.artifactId
- version mavenArtifact.version
- }
- }
- }
- }
- task.dependsOn('clean', 'uploadArchives')
- }
- }
-
- def excludeBuildConfigFile() {
- project.gradle.taskGraph.whenReady {
- BaseExtension extension = (BaseExtension) project.extensions.getByName('android')
- extension.buildTypes.each {
- def buildType = Utils.upperCase(it.name)
- if (productFlavorInfo.combinedProductFlavors.size() == 0) {
- def compileJavaTaskName = "compile${buildType}JavaWithJavac"
- JavaCompile javaCompile = project.tasks.findByName(compileJavaTaskName)
- if (javaCompile != null) {
- javaCompile.exclude(EXCLUDE_BUILD_CONFIG)
- }
- } else {
- productFlavorInfo.combinedProductFlavors.each {
- def compileJavaTaskName = "compile${Utils.upperCase(it)}${buildType}JavaWithJavac"
- JavaCompile javaCompile = project.tasks.findByName(compileJavaTaskName)
- if (javaCompile != null) {
- javaCompile.exclude(EXCLUDE_BUILD_CONFIG)
- }
- }
- }
- }
- }
-
- }
-
def checkMicroModuleBoundary(String taskPrefix, String buildType, String flavorName, List sourceFolders) {
CodeChecker codeChecker
diff --git a/micro-module/src/main/groovy/com/eastwood/tools/plugins/UploadAarTask.groovy b/micro-module/src/main/groovy/com/eastwood/tools/plugins/UploadAarTask.groovy
deleted file mode 100644
index 7d91b0c..0000000
--- a/micro-module/src/main/groovy/com/eastwood/tools/plugins/UploadAarTask.groovy
+++ /dev/null
@@ -1,20 +0,0 @@
-package com.eastwood.tools.plugins
-
-import com.eastwood.tools.plugins.core.MicroModule
-import com.eastwood.tools.plugins.core.extension.MavenArtifact
-import com.eastwood.tools.plugins.core.extension.MavenRepository
-import org.gradle.api.DefaultTask
-import org.gradle.api.tasks.TaskAction
-
-class UploadAarTask extends DefaultTask {
-
- MicroModule microModule
-
- @TaskAction
- void upload() {
- MavenArtifact mavenArtifact = microModule.mavenArtifact
- MavenRepository mavenRepository = mavenArtifact.repository
- getLogger().error("\nUpload artifact(" + mavenArtifact.groupId + ":" + mavenArtifact.artifactId + ":" + mavenArtifact.version + ") to repository(" + mavenRepository.url + ").")
- }
-
-}
\ No newline at end of file
diff --git a/micro-module/src/main/groovy/com/eastwood/tools/plugins/core/MicroModule.groovy b/micro-module/src/main/groovy/com/eastwood/tools/plugins/core/MicroModule.groovy
index 0872fa7..508a5d2 100644
--- a/micro-module/src/main/groovy/com/eastwood/tools/plugins/core/MicroModule.groovy
+++ b/micro-module/src/main/groovy/com/eastwood/tools/plugins/core/MicroModule.groovy
@@ -1,16 +1,11 @@
package com.eastwood.tools.plugins.core
-import com.eastwood.tools.plugins.core.extension.MavenArtifact
class MicroModule {
String name
File microModuleDir
- boolean useMavenArtifact
- MavenArtifact mavenArtifact
-
boolean appliedScript
- boolean addDependency
}
\ No newline at end of file
diff --git a/micro-module/src/main/groovy/com/eastwood/tools/plugins/core/Utils.groovy b/micro-module/src/main/groovy/com/eastwood/tools/plugins/core/Utils.groovy
index 3c2fc68..afb8217 100644
--- a/micro-module/src/main/groovy/com/eastwood/tools/plugins/core/Utils.groovy
+++ b/micro-module/src/main/groovy/com/eastwood/tools/plugins/core/Utils.groovy
@@ -36,7 +36,11 @@ class Utils {
} else {
microModuleName = microModuleName.replaceAll("/", ":")
}
- if (!microModuleDir.exists()) {
+ // in windows and mac system, the file name is not case sensitive, micro-module name may not match file name but run correctly
+ // in linux system(as ci server), this case is wrong
+ // add this condition to find this error in windows
+ if (!microModuleDir.exists() || microModuleName != microModulePath) {
+ System.err.println("microModuleDir:" + microModuleDir.getAbsolutePath() + " not exit, or module name and file name case sensitivity wrong")
return null
}
MicroModule microModule = new MicroModule()
@@ -50,4 +54,4 @@ class Utils {
}
-}
\ No newline at end of file
+}
diff --git a/micro-module/src/main/groovy/com/eastwood/tools/plugins/core/check/CodeChecker.groovy b/micro-module/src/main/groovy/com/eastwood/tools/plugins/core/check/CodeChecker.groovy
index 02ded58..b07c65e 100644
--- a/micro-module/src/main/groovy/com/eastwood/tools/plugins/core/check/CodeChecker.groovy
+++ b/micro-module/src/main/groovy/com/eastwood/tools/plugins/core/check/CodeChecker.groovy
@@ -224,8 +224,7 @@ class CodeChecker {
from = resourcesMap.get(name)
} else if (find.startsWith("import")) {
name = find.substring(find.lastIndexOf(" ") + 1, find.length())
- if (name.endsWith('.R') || name.endsWith('.BuildConfig')) {
- handleMicroModuleRAndBuildConfig(microModuleName, name, find, textLines, absolutePath)
+ if(name.endsWith('.R')) {
continue
}
from = classesMap.get(name)
@@ -307,43 +306,6 @@ class CodeChecker {
return checkManifest.save(manifest)
}
- private void handleMicroModuleRAndBuildConfig(String microModuleName, String name, String find, List textLines, String absolutePath) {
- String packageName = name.substring(0, name.lastIndexOf('.'))
- List microModules = microModulePackageNameMap.get(packageName)
- if (microModules == null || microModules.contains(name)) return
-
- boolean hasDependency
- List withoutDependency = new ArrayList<>()
- for (String from : microModules) {
- hasDependency = microModuleInfo.hasDependency(microModuleName, from)
- if (hasDependency) {
- break
- }
- withoutDependency.add(from)
- }
-
- if (hasDependency) {
- return
- }
-
- List lines = textLines.findIndexValues { it.contains(find) }
- lines.each {
- def lineIndex = it.intValue()
- def lineContext = textLines.get(lineIndex).trim()
- if (lineContext.startsWith("//") || lineContext.startsWith("/*")) {
- return
- }
-
- def message = absolutePath + ':' + (lineIndex + 1)
- if (!errorMessage.contains(message)) {
- message += lineSeparator
- message += "- cannot use [" + find + "] which from MicroModule '${withoutDependency.get(0)}'."
- message += lineSeparator
- errorMessage += message
- }
- }
- }
-
private String initMicroModulePackageName() {
microModulePackageNameMap = new HashMap<>()
microModuleInfo.includeMicroModules.each {
diff --git a/micro-module/src/main/groovy/com/eastwood/tools/plugins/core/extension/DefaultMicroModuleExtension.groovy b/micro-module/src/main/groovy/com/eastwood/tools/plugins/core/extension/DefaultMicroModuleExtension.groovy
index 5d8c1cb..d2ea1b0 100644
--- a/micro-module/src/main/groovy/com/eastwood/tools/plugins/core/extension/DefaultMicroModuleExtension.groovy
+++ b/micro-module/src/main/groovy/com/eastwood/tools/plugins/core/extension/DefaultMicroModuleExtension.groovy
@@ -4,13 +4,11 @@ import com.eastwood.tools.plugins.core.MicroModule
import com.eastwood.tools.plugins.core.Utils
import org.gradle.api.GradleException
import org.gradle.api.Project
-import org.gradle.util.ConfigureUtil
class DefaultMicroModuleExtension implements MicroModuleExtension {
Project project
OnMicroModuleListener onMicroModuleListener
- OnMavenArtifactListener onMavenArtifactListener
boolean codeCheckEnabled = true
@@ -55,20 +53,4 @@ class DefaultMicroModuleExtension implements MicroModuleExtension {
onMicroModuleListener.addIncludeMicroModule(microModule, true)
}
- @Override
- void useMavenArtifact(boolean value) {
- if(onMavenArtifactListener == null) return
-
- onMavenArtifactListener.onUseMavenArtifactChanged(value)
- }
-
- @Override
- void mavenArtifact(Closure closure) {
- if(onMavenArtifactListener == null) return
-
- MavenArtifact mavenArtifact = new MavenArtifact()
- ConfigureUtil.configure(closure, mavenArtifact)
- onMavenArtifactListener.onMavenArtifactChanged(mavenArtifact)
- }
-
}
diff --git a/micro-module/src/main/groovy/com/eastwood/tools/plugins/core/extension/MavenArtifact.groovy b/micro-module/src/main/groovy/com/eastwood/tools/plugins/core/extension/MavenArtifact.groovy
deleted file mode 100644
index 9790e4b..0000000
--- a/micro-module/src/main/groovy/com/eastwood/tools/plugins/core/extension/MavenArtifact.groovy
+++ /dev/null
@@ -1,30 +0,0 @@
-package com.eastwood.tools.plugins.core.extension
-
-import org.gradle.util.ConfigureUtil
-
-class MavenArtifact {
-
- String groupId
- String artifactId
- String version
-
- MavenRepository repository
-
- void groupId(String groupId) {
- this.groupId = groupId
- }
-
- void artifactId(String artifactId) {
- this.artifactId = artifactId
- }
-
- void version(String version) {
- this.version = version
- }
-
- void repository(Closure closure) {
- repository = new MavenRepository()
- ConfigureUtil.configure(closure, repository)
- }
-
-}
\ No newline at end of file
diff --git a/micro-module/src/main/groovy/com/eastwood/tools/plugins/core/extension/MavenRepository.groovy b/micro-module/src/main/groovy/com/eastwood/tools/plugins/core/extension/MavenRepository.groovy
deleted file mode 100644
index 053a6b5..0000000
--- a/micro-module/src/main/groovy/com/eastwood/tools/plugins/core/extension/MavenRepository.groovy
+++ /dev/null
@@ -1,16 +0,0 @@
-package com.eastwood.tools.plugins.core.extension
-
-class MavenRepository {
-
- String url
- Object authentication
-
- void url(String url) {
- this.url = url
- }
-
- void authentication(Object values) {
- this.authentication = values
- }
-
-}
\ No newline at end of file
diff --git a/micro-module/src/main/groovy/com/eastwood/tools/plugins/core/extension/MicroModuleExtension.groovy b/micro-module/src/main/groovy/com/eastwood/tools/plugins/core/extension/MicroModuleExtension.groovy
index db7bdf8..1ed7bb5 100644
--- a/micro-module/src/main/groovy/com/eastwood/tools/plugins/core/extension/MicroModuleExtension.groovy
+++ b/micro-module/src/main/groovy/com/eastwood/tools/plugins/core/extension/MicroModuleExtension.groovy
@@ -10,8 +10,4 @@ interface MicroModuleExtension {
void include(String... microModulePaths)
- void useMavenArtifact(boolean value)
-
- void mavenArtifact(Closure closure)
-
}
diff --git a/micro-module/src/main/groovy/com/eastwood/tools/plugins/core/extension/OnMavenArtifactListener.groovy b/micro-module/src/main/groovy/com/eastwood/tools/plugins/core/extension/OnMavenArtifactListener.groovy
deleted file mode 100644
index 98f6324..0000000
--- a/micro-module/src/main/groovy/com/eastwood/tools/plugins/core/extension/OnMavenArtifactListener.groovy
+++ /dev/null
@@ -1,9 +0,0 @@
-package com.eastwood.tools.plugins.core.extension
-
-interface OnMavenArtifactListener {
-
- void onUseMavenArtifactChanged(boolean value)
-
- void onMavenArtifactChanged(MavenArtifact artifact)
-
-}
diff --git a/picture/1.png b/picture/1.png
index 28ea4ee..e3fedbc 100644
Binary files a/picture/1.png and b/picture/1.png differ
diff --git a/picture/2.png b/picture/2.png
deleted file mode 100644
index 75fa8cd..0000000
Binary files a/picture/2.png and /dev/null differ
diff --git a/settings.gradle b/settings.gradle
index d1e797b..4705f95 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -1,5 +1,5 @@
include ':application', ':library', ':kotlin'
-if(file('micro-module').exists()) {
- includeBuild 'micro-module'
-}
\ No newline at end of file
+//if(file('micro-module').exists()) {
+// includeBuild 'micro-module'
+//}
\ No newline at end of file