Skip to content

Commit 14708dd

Browse files
author
mrzhang
committed
First commit. All component runalone or compile in host
0 parents  commit 14708dd

File tree

124 files changed

+3528
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

124 files changed

+3528
-0
lines changed

AndroidComponent.iml

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<module external.linked.project.id="AndroidComponent" external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$" external.system.id="GRADLE" type="JAVA_MODULE" version="4">
3+
<component name="FacetManager">
4+
<facet type="java-gradle" name="Java-Gradle">
5+
<configuration>
6+
<option name="BUILD_FOLDER_PATH" value="$MODULE_DIR$/build" />
7+
<option name="BUILDABLE" value="false" />
8+
</configuration>
9+
</facet>
10+
</component>
11+
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_7" inherit-compiler-output="true">
12+
<exclude-output />
13+
<content url="file://$MODULE_DIR$">
14+
<excludeFolder url="file://$MODULE_DIR$/.gradle" />
15+
</content>
16+
<orderEntry type="inheritedJdk" />
17+
<orderEntry type="sourceFolder" forTests="false" />
18+
</component>
19+
</module>

AndroidComponentnew.iml

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<module external.linked.project.id="AndroidComponentnew" external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$" external.system.id="GRADLE" type="JAVA_MODULE" version="4">
3+
<component name="FacetManager">
4+
<facet type="java-gradle" name="Java-Gradle">
5+
<configuration>
6+
<option name="BUILD_FOLDER_PATH" value="$MODULE_DIR$/build" />
7+
<option name="BUILDABLE" value="false" />
8+
</configuration>
9+
</facet>
10+
</component>
11+
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_7" inherit-compiler-output="true">
12+
<exclude-output />
13+
<content url="file://$MODULE_DIR$">
14+
<excludeFolder url="file://$MODULE_DIR$/.gradle" />
15+
</content>
16+
<orderEntry type="inheritedJdk" />
17+
<orderEntry type="sourceFolder" forTests="false" />
18+
</component>
19+
</module>

ComponentDemo.iml

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<module external.linked.project.id="ComponentDemo" external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$" external.system.id="GRADLE" type="JAVA_MODULE" version="4">
3+
<component name="FacetManager">
4+
<facet type="java-gradle" name="Java-Gradle">
5+
<configuration>
6+
<option name="BUILD_FOLDER_PATH" value="$MODULE_DIR$/build" />
7+
<option name="BUILDABLE" value="false" />
8+
</configuration>
9+
</facet>
10+
</component>
11+
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_7" inherit-compiler-output="true">
12+
<exclude-output />
13+
<content url="file://$MODULE_DIR$">
14+
<excludeFolder url="file://$MODULE_DIR$/.gradle" />
15+
</content>
16+
<orderEntry type="inheritedJdk" />
17+
<orderEntry type="sourceFolder" forTests="false" />
18+
</component>
19+
</module>

MyApplication.iml

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<module external.linked.project.id="MyApplication" external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$" external.system.id="GRADLE" type="JAVA_MODULE" version="4">
3+
<component name="FacetManager">
4+
<facet type="java-gradle" name="Java-Gradle">
5+
<configuration>
6+
<option name="BUILD_FOLDER_PATH" value="$MODULE_DIR$/build" />
7+
<option name="BUILDABLE" value="false" />
8+
</configuration>
9+
</facet>
10+
</component>
11+
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_7" inherit-compiler-output="true">
12+
<exclude-output />
13+
<content url="file://$MODULE_DIR$">
14+
<excludeFolder url="file://$MODULE_DIR$/.gradle" />
15+
</content>
16+
<orderEntry type="inheritedJdk" />
17+
<orderEntry type="sourceFolder" forTests="false" />
18+
</component>
19+
</module>

README.md

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
## AndroidComponent
2+
原理解释请参考文章[Android彻底组件化方案实践](http://www.jianshu.com/p/1b1d77f58e84)
3+
4+
demo解读请参考文章[Android彻底组件化demo发布](http://www.jianshu.com/p/59822a7b2fad)
5+
6+
### 实现功能:
7+
- 组件可以单独调试
8+
- 组件之间通过接口+实现的方式进行数据传输
9+
- 使用schme和host路由的方式进行activity之间的跳转
10+
- 任意组件可以充当host,集成其他组件进行集成调试
11+
- 可以动态对已集成的组件进行加载和卸载
12+
- 杜绝组件之前相互耦合,代码完全隔离,彻底解耦
13+
14+
### 使用指南
15+
#### 1、主项目引用编译脚本
16+
在根目录的gradle.properties文件中,增加属性:
17+
```
18+
mainmodulename=app
19+
```
20+
其中mainmodulename是项目中的host工程,一般为app
21+
22+
在根目录的build.gradle中增加配置
23+
```
24+
buildscript {
25+
repositories {
26+
maven {
27+
url uri('./repo')
28+
}
29+
}
30+
dependencies {
31+
classpath 'com.mrzhang.andcomponent:build-gradle:0.0.1'
32+
}
33+
}
34+
```
35+
注意:demo中使用本地的repo文件夹来充当maven库地址,请更换为自己的公司maven库
36+
37+
#### 2、拆分组件为module工程
38+
在每个组件的工程目录下新建文件gradle.properties文件,增加以下配置:
39+
```
40+
isRunAlone=true
41+
debugComponent=sharecomponent
42+
compileComponent=com.mrzhang.share:sharecomponent
43+
```
44+
上面三个属性分别对应是否单独调试、debug模式下依赖的组件,release模式下依赖的组件。具体使用方式请解释请参见上文第二篇文章
45+
46+
#### 3、应用组件化编译脚本
47+
在组件和host的build.gradle都增加配置:
48+
```
49+
apply plugin: 'com.dd.comgradle'
50+
```
51+
不需要在引用com.android.application或者com.android.library
52+
53+
同时增加以下extension配置:
54+
```
55+
combuild {
56+
applicatonName = 'com.mrzhang.reader.runalone.application.ReaderApplication'
57+
isRegisterCompoAuto = false
58+
}
59+
```
60+
有关isRegisterCompoAuto的解释请参见上文第二篇文章

app/.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
/build

app/app.iml

Lines changed: 135 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,135 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<module external.linked.project.id=":app" external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$/.." external.system.id="GRADLE" type="JAVA_MODULE" version="4">
3+
<component name="FacetManager">
4+
<facet type="android-gradle" name="Android-Gradle">
5+
<configuration>
6+
<option name="GRADLE_PROJECT_PATH" value=":app" />
7+
</configuration>
8+
</facet>
9+
<facet type="android" name="Android">
10+
<configuration>
11+
<option name="SELECTED_BUILD_VARIANT" value="debug" />
12+
<option name="ASSEMBLE_TASK_NAME" value="assembleDebug" />
13+
<option name="COMPILE_JAVA_TASK_NAME" value="compileDebugSources" />
14+
<afterSyncTasks>
15+
<task>generateDebugSources</task>
16+
</afterSyncTasks>
17+
<option name="ALLOW_USER_CONFIGURATION" value="false" />
18+
<option name="MANIFEST_FILE_RELATIVE_PATH" value="/src/main/AndroidManifest.xml" />
19+
<option name="RES_FOLDER_RELATIVE_PATH" value="/src/main/res" />
20+
<option name="RES_FOLDERS_RELATIVE_PATH" value="file://$MODULE_DIR$/src/main/res" />
21+
<option name="ASSETS_FOLDER_RELATIVE_PATH" value="/src/main/assets" />
22+
</configuration>
23+
</facet>
24+
</component>
25+
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_7" inherit-compiler-output="false">
26+
<output url="file://$MODULE_DIR$/build/intermediates/classes/debug" />
27+
<output-test url="file://$MODULE_DIR$/build/intermediates/classes/test/debug" />
28+
<exclude-output />
29+
<content url="file://$MODULE_DIR$">
30+
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/r/debug" isTestSource="false" generated="true" />
31+
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/aidl/debug" isTestSource="false" generated="true" />
32+
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/debug" isTestSource="false" generated="true" />
33+
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/rs/debug" isTestSource="false" generated="true" />
34+
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/debug" isTestSource="false" generated="true" />
35+
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/debug" type="java-resource" />
36+
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/debug" type="java-resource" />
37+
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/r/androidTest/debug" isTestSource="true" generated="true" />
38+
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/aidl/androidTest/debug" isTestSource="true" generated="true" />
39+
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/androidTest/debug" isTestSource="true" generated="true" />
40+
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/rs/androidTest/debug" isTestSource="true" generated="true" />
41+
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/androidTest/debug" isTestSource="true" generated="true" />
42+
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/androidTest/debug" type="java-test-resource" />
43+
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/androidTest/debug" type="java-test-resource" />
44+
<sourceFolder url="file://$MODULE_DIR$/src/debug/res" type="java-resource" />
45+
<sourceFolder url="file://$MODULE_DIR$/src/debug/resources" type="java-resource" />
46+
<sourceFolder url="file://$MODULE_DIR$/src/debug/assets" type="java-resource" />
47+
<sourceFolder url="file://$MODULE_DIR$/src/debug/aidl" isTestSource="false" />
48+
<sourceFolder url="file://$MODULE_DIR$/src/debug/java" isTestSource="false" />
49+
<sourceFolder url="file://$MODULE_DIR$/src/debug/rs" isTestSource="false" />
50+
<sourceFolder url="file://$MODULE_DIR$/src/debug/shaders" isTestSource="false" />
51+
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/res" type="java-test-resource" />
52+
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/resources" type="java-test-resource" />
53+
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/assets" type="java-test-resource" />
54+
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/aidl" isTestSource="true" />
55+
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/java" isTestSource="true" />
56+
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/rs" isTestSource="true" />
57+
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/shaders" isTestSource="true" />
58+
<sourceFolder url="file://$MODULE_DIR$/src/main/res" type="java-resource" />
59+
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
60+
<sourceFolder url="file://$MODULE_DIR$/src/main/assets" type="java-resource" />
61+
<sourceFolder url="file://$MODULE_DIR$/src/main/aidl" isTestSource="false" />
62+
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
63+
<sourceFolder url="file://$MODULE_DIR$/src/main/rs" isTestSource="false" />
64+
<sourceFolder url="file://$MODULE_DIR$/src/main/shaders" isTestSource="false" />
65+
<sourceFolder url="file://$MODULE_DIR$/src/test/res" type="java-test-resource" />
66+
<sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" />
67+
<sourceFolder url="file://$MODULE_DIR$/src/test/assets" type="java-test-resource" />
68+
<sourceFolder url="file://$MODULE_DIR$/src/test/aidl" isTestSource="true" />
69+
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
70+
<sourceFolder url="file://$MODULE_DIR$/src/test/rs" isTestSource="true" />
71+
<sourceFolder url="file://$MODULE_DIR$/src/test/shaders" isTestSource="true" />
72+
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/res" type="java-test-resource" />
73+
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/resources" type="java-test-resource" />
74+
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/assets" type="java-test-resource" />
75+
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/aidl" isTestSource="true" />
76+
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/java" isTestSource="true" />
77+
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" />
78+
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/shaders" isTestSource="true" />
79+
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/assets" />
80+
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/blame" />
81+
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/classes" />
82+
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental" />
83+
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental-classes" />
84+
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental-runtime-classes" />
85+
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental-safeguard" />
86+
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental-verifier" />
87+
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/instant-run-resources" />
88+
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/instant-run-support" />
89+
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/jniLibs" />
90+
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/manifests" />
91+
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/reload-dex" />
92+
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/res" />
93+
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/restart-dex" />
94+
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/rs" />
95+
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/shaders" />
96+
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/split-apk" />
97+
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/symbols" />
98+
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/transforms" />
99+
<excludeFolder url="file://$MODULE_DIR$/build/outputs" />
100+
<excludeFolder url="file://$MODULE_DIR$/build/tmp" />
101+
</content>
102+
<orderEntry type="jdk" jdkName="Android API 25 Platform" jdkType="Android SDK" />
103+
<orderEntry type="sourceFolder" forTests="false" />
104+
<orderEntry type="library" exported="" name="support-core-ui-26.0.0-alpha1" level="project" />
105+
<orderEntry type="library" exported="" name="support-core-utils-26.0.0-alpha1" level="project" />
106+
<orderEntry type="library" exported="" name="support-fragment-26.0.0-alpha1" level="project" />
107+
<orderEntry type="library" exported="" name="support-vector-drawable-26.0.0-alpha1" level="project" />
108+
<orderEntry type="library" exported="" name="support-v4-26.0.0-alpha1" level="project" />
109+
<orderEntry type="library" exported="" name="support-media-compat-26.0.0-alpha1" level="project" />
110+
<orderEntry type="library" exported="" name="support-compat-26.0.0-alpha1" level="project" />
111+
<orderEntry type="library" exported="" name="animated-vector-drawable-26.0.0-alpha1" level="project" />
112+
<orderEntry type="library" exported="" name="appcompat-v7-26.0.0-alpha1" level="project" />
113+
<orderEntry type="module" module-name="componentservice" exported="" />
114+
<orderEntry type="module" module-name="basiclib" exported="" />
115+
<orderEntry type="module" module-name="basicres" exported="" />
116+
<orderEntry type="module" module-name="componentlib" exported="" />
117+
<orderEntry type="library" exported="" name="okio-1.9.0" level="project" />
118+
<orderEntry type="library" exported="" scope="TEST" name="runner-0.5" level="project" />
119+
<orderEntry type="library" exported="" name="picasso-2.5.2" level="project" />
120+
<orderEntry type="library" exported="" scope="TEST" name="espresso-idling-resource-2.2.2" level="project" />
121+
<orderEntry type="library" exported="" scope="TEST" name="hamcrest-library-1.3" level="project" />
122+
<orderEntry type="library" exported="" scope="TEST" name="hamcrest-integration-1.3" level="project" />
123+
<orderEntry type="library" exported="" scope="TEST" name="jsr305-2.0.1" level="project" />
124+
<orderEntry type="library" exported="" scope="TEST" name="espresso-core-2.2.2" level="project" />
125+
<orderEntry type="library" exported="" scope="TEST" name="exposed-instrumentation-api-publish-0.5" level="project" />
126+
<orderEntry type="library" exported="" scope="TEST" name="rules-0.5" level="project" />
127+
<orderEntry type="library" exported="" scope="TEST" name="javax.annotation-api-1.2" level="project" />
128+
<orderEntry type="library" exported="" scope="TEST" name="javax.inject-1" level="project" />
129+
<orderEntry type="library" exported="" scope="TEST" name="javawriter-2.1.1" level="project" />
130+
<orderEntry type="library" exported="" name="okhttp-3.4.1" level="project" />
131+
<orderEntry type="library" exported="" scope="TEST" name="hamcrest-core-1.3" level="project" />
132+
<orderEntry type="library" exported="" scope="TEST" name="junit-4.12" level="project" />
133+
<orderEntry type="library" exported="" name="support-annotations-26.0.0-alpha1" level="project" />
134+
</component>
135+
</module>

app/build.gradle

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
apply plugin: 'com.dd.comgradle'
2+
3+
android {
4+
compileSdkVersion 25
5+
buildToolsVersion "25.0.2"
6+
defaultConfig {
7+
applicationId "com.mrzhang.androidcomponent"
8+
minSdkVersion 15
9+
targetSdkVersion 14
10+
versionCode 1
11+
versionName "1.0"
12+
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
13+
}
14+
buildTypes {
15+
release {
16+
minifyEnabled true
17+
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
18+
}
19+
20+
debug {
21+
minifyEnabled false
22+
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
23+
}
24+
}
25+
}
26+
27+
dependencies {
28+
compile project(':componentservice')
29+
}
30+
31+
combuild {
32+
applicatonName = 'com.mrzhang.component.application.AppApplication'
33+
isRegisterCompoAuto = true
34+
}
35+

app/gradle.properties

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# Project-wide Gradle settings.
2+
# IDE (e.g. Android Studio) users:
3+
# Gradle settings configured through the IDE *will override*
4+
# any settings specified in this file.
5+
# For more details on how to configure your build environment visit
6+
# http://www.gradle.org/docs/current/userguide/build_environment.html
7+
# Specifies the JVM arguments used for the daemon process.
8+
# The setting is particularly useful for tweaking memory settings.
9+
org.gradle.jvmargs=-Xmx1536m
10+
# When configured, Gradle will run in incubating parallel mode.
11+
# This option should only be used with decoupled projects. More details, visit
12+
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
13+
# org.gradle.parallel=true
14+
isRunAlone=true
15+
debugComponent=readercomponent,com.mrzhang.share:sharecomponent
16+
compileComponent=readercomponent,sharecomponent
17+
18+

app/proguard-rules.pro

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
# Add project specific ProGuard rules here.
2+
# By default, the flags in this file are appended to flags specified
3+
# in /Users/klee/Library/Android/sdk/tools/proguard/proguard-android.txt
4+
# You can edit the include path and order by changing the proguardFiles
5+
# directive in build.gradle.
6+
#
7+
# For more details, see
8+
# http://developer.android.com/guide/developing/tools/proguard.html
9+
10+
# Add any project specific keep options here:
11+
12+
# If your project uses WebView with JS, uncomment the following
13+
# and specify the fully qualified class name to the JavaScript interface
14+
# class:
15+
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
16+
# public *;
17+
#}
18+
19+
# Uncomment this to preserve the line number information for
20+
# debugging stack traces.
21+
#-keepattributes SourceFile,LineNumberTable
22+
23+
# If you keep the line number information, uncomment this to
24+
# hide the original source file name.
25+
#-renamesourcefileattribute SourceFile
26+
-keep class com.mrzhang.component.componentlib.** {*;}
27+
-keep class * implements com.mrzhang.component.componentlib.applicationlike.IApplicationLike {*;}
28+

0 commit comments

Comments
 (0)