Giter Site home page Giter Site logo

luojilab / ddcomponentforandroid Goto Github PK

View Code? Open in Web Editor NEW
3.3K 106.0 569.0 1.04 MB

一套完整有效的android组件化方案,支持组件的组件完全隔离、单独调试、集成调试、组件交互、UI跳转、动态加载卸载等功能

License: MIT License

Java 81.71% Groovy 16.17% Kotlin 2.12%
android-architecture android-application android-component android

ddcomponentforandroid's People

Contributors

endsmile avatar leobert-lan avatar mqzhangw avatar mrgaolei avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

ddcomponentforandroid's Issues

期待后期对Instant Run很好的支持

学习了一下,很不错,希望后期能优化支持 Instant Run,我们公司的项目,组件化已经一段时间了,确实没考虑很好的解耦,后面也会改成,面向接口的方式

还有疑问

不好意思,我又来打扰了!
根据咱们的思路,进行项目的组件拆分;拆分的时候遇到了写不太明确的地方,再次提问:
1.某个组件中使用了第三方,需要将主module(app)的主Activity赋值给第三方(third.a=MainActivity.class),这个要怎么拆?(主app对外提供一个服务?如果是的话,主app的ApplicationLike怎么注册)?
2.项目中的数据库,怎么拆?(不同组件可能都会用的数据库,数据库用的greendao)

关于项目混淆

请教下,关于项目混淆,你们的方案是怎样的。aar引入的包你们是单独对每个组件做混淆吗。

跳转Activity的常见需求

startActivity 已实现
startActivityForResult 待实现
startActivities 待实现
对intent的FLAG进行支持 待实现

请教一个问题

我打算把这个项目试用到我们新开发的项目中,还是发现各种各种的问题,比如,组件怎么跳到主app模块的activity中?比如当我组件测试完成后,将isAlone=false,然后运行assmeRealese,发现报一个找到模块的问题,比如某些本来没问题的模块资源会突然报无法转换成英文的问题,希望提高稳定性吧,感觉暂时不太适合用于正式项目。

请教一下三个注册组件的区别

Router.registerComponent();
router.addService();
uiRouter.registerUI();

这三种分别是什么作用

另外项目中
ReadBookService service = (ReadBookService)router.getService(ReadBookService.class.getSimpleName());
service始终是null,会是什么原因呢?

第一次运行app的无法卸载Share组件,需要点击一次安装 再点击一次卸载才可以.

看了博客写的非常好,非常赞,我以前也经常看逻辑思维,只不过今年不在优酷播了之后就没看过了 哈哈哈.

发现了一个bug 第一次点击是无法卸载组件的.调试了一下应该是通过字节码插入模式调用IApplicationLike.onCreate的时候没有注册到Router的Map里面,导致我点击了卸载Share组件之后还能点击下面的文字跳转到ShareAct.不知道能否在用gradle插件 进行字节码插入的的时候把组件也注册到Router里面,这样的话应该就没有这个问题了.

想问下混淆怎么处理

如题,我引用的libs都在basiclib module,那么是每个module都针对用到的libs做混淆处理,还是只在app做混淆处理或者在basiclib做混淆处理?
现在打release包的时候由于有混淆,遇到了这样一个错误:Error:Execution failed for task ':app:transformClassesAndResourcesWithProguardForRelease'.

Unexpected scopes found in folder '/.../app/build/intermediates/transforms/proguard/release'. Required: EXTERNAL_LIBRARIES, PROJECT, SUB_PROJECTS. Found: LOCAL_DEPS, PROJECT

comgradle插件不支持Variant

期待comgradle插件在添加依赖的过程能区分Variant,期望能给予支持,谢谢!
比如app有:
2个productFlavors: uat和prod
2个buildType:debug和release
那么会有4个Variant: uatDebug、uatRelease、prodRelease、prodDebug
看了下插件源码,是根据assemble任务是否是debug和release来添加依赖的,只区分了debug和release。

在library我尝试加入了以下代码:
project.afterEvaluate {
project.android.libraryVariants.all { BaseVariant variant ->
.....}
}
将打包区分Variant输入到不同路径下和发布是ok的。但在application去动态添加依赖一直不成功。
比如添加:
uatDebugCompile project(path: ':component_base', configuration: 'uatDebug')
uatReleaseCompile project(path: ':component_base', configuration: 'uatRelease')
prodDebugCompile project(path: ':component_base', configuration: 'prodDebug')
prodReleaseCompile project(path: ':component_base', configuration: 'prodRelease')

在project.afterEvaluate后添加,会报不能在afterEvaluate后改动依赖的错误。
不在project.afterEvaluate后添加,又不能获取到Variant,很纠结...

新建项目gradle发布到本地出问题

Error:(2, 0) Could not get unknown property 'mainmodulename' for root project 'ComponentPlugDemo2' of type org.gradle.api.Project.

为什么会找不到我的主项目名字 需要设置吗?

组件中不可以使用ButterKnife吗?

使用ButterKnife会出现空指针异常。
12-04 14:06:04.123 5233-5233/? E/AndroidRuntime: FATAL EXCEPTION: main Process: com.lxkj.yunhetong.component.testmoudle, PID: 5233 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.lxkj.yunhetong.component.testmoudle/com.lxkj.yunhetong.component.testmoudle.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2984) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3045) at android.app.ActivityThread.-wrap14(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1642) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6776) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1518) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1408) Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference at com.lxkj.yunhetong.component.testmoudle.MainActivity.onCreate(MainActivity.java:21) at android.app.Activity.performCreate(Activity.java:6956) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1126) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2927) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3045)  at android.app.ActivityThread.-wrap14(ActivityThread.java)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1642)  at android.os.Handler.dispatchMessage(Handler.java:102)  at android.os.Looper.loop(Looper.java:154)  at android.app.ActivityThread.main(ActivityThread.java:6776)  at java.lang.reflect.Method.invoke(Native Method)  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1518)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1408) 

请教一个问题

如果阅读与分享等组件单独调试运行的时候都需要一个公共的模块,比如Application类(用来初始化必要组件),启动页,可能还需要登录注册模块等,这部分代码放在哪比较合适。

关于StartActivityForResult

您好,你的组件化方案我从头看了一遍。有个小问题,如果启动一个组件的某个UI页面,能否用StartActivityForResult的方式,想要获取页面回调该如何操作呢?

插件重新上传到本地仓库运行报错

Error:Execution failed for task ':app:transformClassesWithComponentCodeForDebug'.

No such property: Format for class: com.dd.buildgradle.ComCodeTransform
请问这个是什么原因?demo运行没有问题,删除repo后,重新上传到本地仓库运行出现的错误。

求助,有人知道具体是什么原因么

使用了viewdatabinding导出的aar包后 给app模块跑,出现异常,layout的问题,在另外一部电脑导出来的就出现系统生成的viewdatabind对应的类找不到~。。
E/AndroidRuntime: FATAL EXCEPTION: main
Process: net.biaozhun.biaozhun_component, PID: 5119
java.lang.RuntimeException: Unable to start activity ComponentInfo{net.biaozhun.biaozhun_component/net.biaozhun.biaozhun_component.MainActivity}: android.view.InflateException: Binary XML file line #2: Binary XML file line #2: Error inflating class layout
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2519)
at android.app.ActivityThread.access$900(ActivityThread.java:161)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1368)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5541)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:745)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:635)
Caused by: android.view.InflateException: Binary XML file line #2: Binary XML file line #2: Error inflating class layout
at android.view.LayoutInflater.inflate(LayoutInflater.java:539)
at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
at net.biaozhun.framework_base.base.BaseDataBindingFragment.onCreateView(BaseDataBindingFragment.java:88)
at android.support.v4.app.Fragment.performCreateView(Fragment.java:1974)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1067)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1252)
at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:742)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1617)
at android.support.v4.app.FragmentController.execPendingActions(FragmentController.java:339)
at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:601)
at net.biaozhun.framework_base.base.BaseActivity.onStart(BaseActivity.java:87)
at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1238)
at android.app.Activity.performStart(Activity.java:6304)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2422)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2519) 
at android.app.ActivityThread.access$900(ActivityThread.java:161) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1368) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:148) 
at android.app.ActivityThread.main(ActivityThread.java:5541) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:745) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:635) 
Caused by: android.view.InflateException: Binary XML file line #2: Error inflating class layout
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:776)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704)
at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
at android.view.LayoutInflater.inflate(LayoutInflater.java:423) 
at net.biaozhun.framework_base.base.BaseDataBindingFragment.onCreateView(BaseDataBindingFragment.java:88) 
at android.support.v4.app.Fragment.performCreateView(Fragment.java:1974) 
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1067) 
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1252) 
at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:742) 
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1617) 
at android.support.v4.app.FragmentController.execPendingActions(FragmentController.java:339) 
at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:601) 
at net.biaozhun.framework_base.base.BaseActivity.onStart(BaseActivity.java:87) 
at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1238) 
at android.app.Activity.performStart(Activity.java:6304) 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2422) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2519) 
at android.app.ActivityThread.access$900(ActivityThread.java:161) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1368) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:148) 
at android.app.ActivityThread.main(ActivityThread.java:5541) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:745) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:635) 
Caused by: java.lang.ClassNotFoundException: Didn't find class "android.view.layout" on path: DexPathList[[zip file "/data/app/net.biaozhun.biaozhun_component-2/base.apk", zip file "/data/app/net.biaozhun.biaozhun_component-2/split_lib_dependencies_apk.apk", zip file "/data/app/net.biaozhun.biaozhun_component-2/split_lib_slice_0_apk.apk", zip file "/data/app/net.biaozhun.biaozhun_component-2/split_lib_slice_1_apk.apk", zip file "/data/app/net.biaozhun.biaozhun_component-2/split_lib_slice_2_apk.apk", zip file "/data/app/net.biaozhun.biaozhun_component-2/split_lib_slice_3_apk.apk", zip file "/data/app/net.biaozhun.biaozhun_component-2/split_lib_slice_4_apk.apk", zip file "/data/app/net.biaozhun.biaozhun_component-2/split_lib_slice_5_apk.apk", zip file "/data/app/net.biaozhun.biaozhun_component-2/split_lib_slice_6_apk.apk", zip file "/data/app/net.biaozhun.biaozhun_component-2/split_lib_slice_7_apk.apk", zip file "/data/app/net.biaozhun.biaozhun_component-2/split_lib_slice_8_apk.apk", zip file "/data/app/net.biaozhun.biaozhun_component-2/split_lib_slice_9_apk.apk"],nativeLibraryDirectories=[/data/app/net.biaozhun.biaozhun_component-2/lib/arm64, /vendor/lib64, /system/lib64]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
at java.lang.ClassLoader.loadClass(ClassLoader.java:469)
at android.view.LayoutInflater.createView(LayoutInflater.java:583)
at android.view.LayoutInflater.onCreateView

scheme 拼写

使用schme和host路由的方式进行activity之间的跳转

scheme

androidTest问题

J:\DDComponentForAndroid-master\readercomponent\src\androidTest\java\com\mrzhang\comp_reader\ExampleInstrumentedTest.java
Error:(4, 28) 错误: 程序包android.support.test不存在
Error:(5, 35) 错误: 程序包android.support.test.runner不存在
Error:(7, 17) 错误: 程序包org.junit不存在
Error:(8, 24) 错误: 程序包org.junit.runner不存在
Error:(10, 24) 错误: 程序包org.junit不存在
Error:(17, 2) 错误: 找不到符号
符号: 类 RunWith
Error:(19, 6) 错误: 找不到符号
符号: 类 Test
位置: 类 ExampleInstrumentedTest
Error:(22, 30) 错误: 找不到符号
符号: 变量 InstrumentationRegistry
位置: 类 ExampleInstrumentedTest
Error:(24, 9) 错误: 找不到符号
符号: 方法 assertEquals(String,String)
位置: 类 ExampleInstrumentedTest

如果进行单元测试 是不是每个component里面还要添加测试的依赖包呀?

请教配置相关

我的线上线下环境相关的配置,原本是写在app的build.gradle里的,

   //本地开发环境[开启日志打印;测试环境ip;不混淆]
        debug {
            resValue "string", "app_name", "xx线下"
            //是否打印日志
            buildConfigField "boolean", "IS_DEBUG", "true"
            //测试环境ip
            buildConfigField "boolean", "API_ONLINE", "false"
            //测试环境ip (https)
            buildConfigField "boolean", "API_TEST", "false"
            // 预上线
            buildConfigField "boolean", "API_PREBOARD", "false"
            //友盟key配置 线下false
            buildConfigField "boolean", "UM_ONLINE", "false"
            //是否混淆
            minifyEnabled false
            // 移除无用的resource文件
            shrinkResources false
            //Zipalign优化
            zipAlignEnabled false
            signingConfig signingConfigs.debug
            // tinker关闭的情况下 将tinker需要的类放入主dex
            multiDexKeepProguard file('multidexConfig.pro')
        }
        //测试环境[崩溃日志写入sd卡;测试环境ip(https);混淆代码]
        dev_test {
            resValue "string", "app_name", "xx测试"
            //是否打印日志
            buildConfigField "boolean", "IS_DEBUG", "false"
            //测试环境ip
            buildConfigField "boolean", "API_ONLINE", "false"
            buildConfigField "boolean", "API_TEST", "true"
            // 预上线
            buildConfigField "boolean", "API_PREBOARD", "false"
            //友盟key配置 线下false
            buildConfigField "boolean", "UM_ONLINE", "false"
            signingConfig signingConfigs.debug

;组件化拆分后就会出现不同组件都需要这个配置里的东西,我要在每个组件里都写一份?

组件间的多播处理

感谢作者的开源资料及文章,收益匪浅。
有个问题几个问题想请教下:

  1. 如果组件A引用引用组件B的某个类,该类是否需要下沉到service层;
  2. 如果业务中涉及到1场景,如果多个组件引用组件B的某个类,当该类的某些变量改变时需要广播,如何如理。(目前我的做法是eventbus,同时下沉该类到service解决各组件间的编译依赖问题);
  3. 一般登录类账号管理,是否会视为组件级别,还是在service层之上,普通组件之下。

谢谢!

定制化的问题

在定制化的时候替换成maven仓库的地址这里
File file = project.file("../componentrelease/" + str.split(":")[1] + "-release.aar")
是直接将"../componentrelease/"改为maven地址吗?
多谢!

组件间传递数据

public class ReaderAppLike implements IApplicationLike {

    Router router = Router.getInstance();

    @Override
    public void onCreate() {
        router.addService(ReadBookService.class.getSimpleName(), new ReadBookServiceImpl());
    }

    @Override
    public void onStop() {
        router.removeService(ReadBookService.class.getSimpleName());
    }
}
  • 组件初始化时,无论组件间是否发生交互,都会注册Service。
  • 对于有些业务场景,一个组件的入口比较多,onStop()方法没有调用时机,Service无法卸载。

是否有不必持有ServiceImpl对象而实现数据交互的方式?

一点疑问

首先感谢作者开源这么棒的方案,辛苦!有点小疑问,求解答:
1.basiclib中是不是放我的所有基础类,例如基础工具类、项目中统一的BaseActivity等?
2.butterknife在application的时候生成的是R,library的时候是R2,框架能不能兼容这个?

实体类问题

求问:两个module都要用到相同的bean,是copy放在各自模块?还是把所有bean统一放在一个资源module里面好些?类似问题也例如公共接口等。

切换组件运行,会出现ClassNotFoundException,clean之后再运行就ok

java.lang.RuntimeException: Unable to instantiate application com.mrzhang.share.runalone.application.ShareApplication: java.lang.ClassNotFoundException: Didn't find class "com.mrzhang.share.runalone.application.ShareApplication" on path: DexPathList[[zip file "/data/app/com.mrzhang.share-1/base.apk"],nativeLibraryDirectories=[/data/app/com.mrzhang.share-1/lib/arm, /vendor/lib, /system/lib]]

一些小小建议

1.页面跳转这块建议使用ARouter
2.关于gradle打包所有*.aar文件这块 希望可以给出详细文档

插件问题

apply plugin: 'com.dd.comgradle' 请问这是个什么插件?

与我的设计可以相互借鉴

EoaSplit

我在前段时间为我们的项目设计的模块化方案是:

EoaSplit

现在已经应用到实际的项目开发中,看过这个库之后有很多收获,但是EoaSplitDDComponentForAndroid的设计有一些区别,可以供参考:

独立的业务接口层

每个业务模块xx拥有自己的接口层xx-common,接口层放置的是:

  1. 模块提供给外界调用的接口/接口仓库
  2. 模块发出的事件Event
  3. 模块提供给外界使用的dto信息

各个业务模块的接口层一直存在,可以被任意引用

业务模块初始化

不是通过指定类名的反射,而是每个业务模块在自己的AndroidManifest.xml文件中将初始化类信息通过meta-data节点注册,这样在编译的时候每个模块的meta-data都会被合并,然后application初始化的时候会读取android:value="module_init"的节点,并根据android:name信息反射读取,这样的好处是如果类被建立了关联,编译器会处理为引用,不会有警告未被调用且重构时不会出现错误,且依赖/解除依赖代码不会报错

<meta-data
    android:name="com.ldy.account.receiver.AccountInitReceiver"
    android:value="module_init"/>

模块间通信

不只是service(facad)的直接调用形式,还提供了Event

  1. NotificationEvent纯粹的通知事件
  2. GetDatasEvent需要其它模块提供数据时,而数据的提供方又不确定,发出此事件由其它模块调用此事件的add接口添加数据

且事件提供了plug,用于记录,拦截事件等

Activity的跳转使用接口直接调用实现

模块配置

模块需要的配置信息,每个模块都需要各种各样的配置信息,这些配置信息可能是java中的常量,resource资源,.property文件等,且配置信息可能多个模块共用,参考spring的配置形式

account.baseUrl=https://11.12.109.125:8124/eoa-war/api/v2/
public static final String BASE_URL =
        getStrValue(new PropertyValue("account.baseUrl"), new PropertyValue("baseUrl"));

业务模块间依赖

模块间依赖是必然存在的,但是不允许平行依赖(业务模块依赖业务模块),业务模块只能依赖别的业务模块的接口层,使用service(facad)时需要从仓库中取出同时判空(空为业务模块不存在)

app作为整个系统的容器,放置配置信息及依赖需要

没有的部分

  1. 没有对组件的单独调试,这点确实值得借鉴
  2. 对非业务组件(view组件,通用功能组件)的特别处理,只是规定了其版本号
  3. 没有对界面跳转做特别处理,不过拥有可选的跳转的拦截器
  4. 没有对业务模块的卸载做特殊处理(实际需求)

build-gradle:0.0.1和'./repo'为神魔不能选其一?

dependencies {
classpath 'com.mrzhang.andcomponent:build-gradle:0.0.1'

    // NOTE: Do not place your com.putao.login.runalone dependencies here; they belong
    // in the individual module build.gradle files
}

maven { url uri('./repo') }

两个为何不能选择一个 ,少一个报错。

求助,在使用Dagger2中遇到了麻烦

我想在basiclib module中的ActivityComponent接口中注册inject某一个具体的Activity的方法,可是根本访问不到该Activity,因为该Activity在其他的module中,根本访问不到。哪位大牛有没有好的办法可以解决这个问题

路由URI“规范”问题

当前UI跳转使用的URI规范还比较粗糙。

而且我觉得host部分还是对应组件比较合适,activity的“地址”对应主机上的path。当前demo中path “share”直接对应了host 。
页面跳转的地方也有一些hardcode


我会在anno分支尝试优化,包括设计也会补充相应文档

这块代码好像不起作用?(copy module-release.aar)

System.out.println("apply plugin is " + 'com.android.library');
project.afterEvaluate {
    Task assembleReleaseTask = project.tasks.findByPath("assembleRelease")
    if (assembleReleaseTask != null) {
        assembleReleaseTask.doLast {
            File infile = project.file("build/outputs/aar/$module-release.aar")
            File outfile = project.file("../componentrelease")
            File desFile = project.file("$module-release.aar");
            project.copy {
                from infile
                into outfile
                rename {
                    String fileName -> desFile.name
                }
            }
            System.out.println("$module-release.aar copy success ");
        }
    }
}

插件问题

apply plugin: 'com.dd.comgradle'请问这是什么插件工程里搜索不到

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.