Giter Site home page Giter Site logo

androidmodulepattern's Introduction

应用截图

AndroidModulePattern

Android项目组件化示例代码

Android组件化方案http://blog.csdn.net/guiying712/article/details/55213884

Android组件化之终极方案http://blog.csdn.net/guiying712/article/details/78057120

  1. 现在的 AndroidModulePattern 使用 阿里ARouter作为路由;

  2. Android组件化方案已经支持 Fragment组件化,使用方法请下载Demo查看;

  3. 本项目已适配Android Studio 3.0.1版本(Google仓库会带来一定影响)

集成开发模式和组件开发模式转换

1、首先打开Android项目的 gradle.properties 文件,然后将 isModule 改为你需要的开发模式(true/false), 然后点击 "Sync Project" 按钮同步项目;

2、Image 在运行之前,请先按照图中选择一个能够运行的组件;

组件功能介绍

app组件功能(空壳工程):

  1. 配置整个项目的Gradle脚本,例如 混淆、签名等;
  2. app组件中可以初始化全局的库,例如Lib.init(this);
  3. 添加 multiDex 功能
  4. 业务组件管理(组装);

main组件功能(业务组件):

  1. 声明应用的launcherActivity----->android.intent.category.LAUNCHER;
  2. 添加SplashActivity;
  3. 添加LoginActivity;
  4. 添加MainActivity;

girls/news组件功能(业务组件):

  1. 这两个组件都是业务组件,根据产品的业务逻辑独立成一个组件;

common组件功能(功能组件):

  1. common组件是基础库,添加一些公用的类;
  2. 例如:网络请求、图片加载、工具类、base类等等;
  3. 声明APP需要的uses-permission;
  4. 定义全局通用的主题(Theme);

License

Copyright 2017 guiying712, AndroidModulePattern Open Source Project

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

androidmodulepattern's People

Contributors

guiying712 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

androidmodulepattern's Issues

项目报错了

Error:(4, 1) A problem occurred evaluating root project 'AndroidModulePattern-master 2'.

Could not read script '/versions.gradle' as it does not exist.

apply from: '/versions.gradle'

这个文件 有啊 为什么会报错呢

BaseApplication里面遍历application的代理类这块感觉要是类很多会耗性能

大神求解:
mAppDelegateList = ClassUtils.getObjectsWithInterface(this, IApplicationDelegate.class, ROOT_PACKAGE);
这里查找对应包下面所有的类 进行遍历如果app的类过多是不是会耗性能呢?

因为代理类一般一个模块只有一个类你这边取名低MyDelegate
可否根据配置文件拿到主工程依赖的子模块名称 然后直接去找到对应的 package.model.MyDelegate呢?

Fragment 如何模块化?

例如微信那样的布局,4Tab的都是fragment填充,如何组件化?我看了一些组件化的文章都是以Activity为单位进行,而实际开发中往往是一个Activity带几个Fragment

如果不用router是否可行?

您好,我在尝试这种方案的时候,试图不使用router,虽然可以通过增加compile project从而在跳转的时候直接使用intent(this, another_module.class),但是会遇到问题。比如:从application向其他lib的activity时完全可以,但其他的lib要跳到application的activity就会遇到麻烦,因为那些lib需要依赖一个application,build时不通过。
可能我上述还是有些难以难以理清,不过想先问下有没有试过没有router也可使用此方案呢?

一些反馈

今天拉取作者的代码以后的一些实践反馈:
按照作者的操作 在gradle.properties 设置isModule为true以后,运行module_main,(会出现三个按钮),点击NEWS跟GIRLS按钮以后,程序崩溃
Fragment应该还有别的办法
最后 感谢作者的分享

关于在子模块中编写代码时,application context 的引用

子模块只在debug时才有 application 里面只能做一些初始化操作,
后续打包时这些初始化都在主模块app 初始化,
子model中的application是单独调试子模块时候使用,
子model内编写代马时,一定注意不能使用 application context 的 ,
不知我说的对吗?

Common公用问题

场景 A组件A公司开发 B组件B公司开发 应Common怎么办 两个公司共同维护吗,不是很理解这部分

组件获取到的Fragment显示与UI顺序如何保证一直,我看你DEMO中是错乱的

我看了下,你是通过报名路径,你是拿到IapplicationDelegate的集合后,然后在基类Application的Create方法中For循环去执行实现了IapplicationDelegate的类的Create方法,然后添加Fragment到ViewManager。
我想问的是获取IapplicationDelegate集合中的类的排序如果不能保证,那添加到ViewManager的Fragment集合的Fragment的顺序也就无法保证,这样的话是不是还得根据UI的界面顺序对Fragment集合重做一次排序,在添加到viewpager

请求数据的解析

看了作者博客过来的,对使用Retrofit2封装适用于组件化项目的网络库挺感兴趣.不过有一个疑问,在HttpClient中数据的解析好像是在主线程处理的,这样感觉有点不太好吧,有没有什么改进的办法呢?

在实际公司组件化git部署用的哪种方式

你好,麻烦问下,
1.在实际公司组件化git部署用的哪种方式,gitsubmodule,repo,还是直接组件打包aar发布maven然后主项目引用,或者其他方式。最近再纠结选哪种方式。

项目导入出错

D:\demo\AndroidModulePattern-master\AndroidModulePattern-master\module_girls\build.gradle
Error:Error:Failed to resolve: com.github.franmontiel:PersistentCookieJar:v1.0.1
Open File
Show in Project Structure dialog
Error:Error:Failed to resolve: com.github.chrisbanes:PhotoView:2.0.0
Open File
Show in Project Structure dialog
Error:Error:Failed to resolve: com.github.GrenderG:Toasty:1.1.3
Open File
Show in Project Structure dialog
D:\demo\AndroidModulePattern-master\AndroidModulePattern-master\module_main\build.gradle
Error:Error:Failed to resolve: com.github.franmontiel:PersistentCookieJar:v1.0.1
Open File
Show in Project Structure dialog
Error:Error:Failed to resolve: com.github.chrisbanes:PhotoView:2.0.0
Open File
Show in Project Structure dialog
Error:Error:Failed to resolve: com.github.GrenderG:Toasty:1.1.3
Open File
Show in Project Structure dialog
D:\demo\AndroidModulePattern-master\AndroidModulePattern-master\module_app\build.gradle
Error:Error:Failed to resolve: com.github.franmontiel:PersistentCookieJar:v1.0.1
Open File
Show in Project Structure dialog
Error:Error:Failed to resolve: com.github.chrisbanes:PhotoView:2.0.0
Open File
Show in Project Structure dialog
Error:Error:Failed to resolve: com.github.GrenderG:Toasty:1.1.3
Open File
Show in Project Structure dialog
D:\demo\AndroidModulePattern-master\AndroidModulePattern-master\lib_common\build.gradle
Error:Error:Failed to resolve: com.github.franmontiel:PersistentCookieJar:v1.0.1
Open File
Show in Project Structure dialog
Error:Error:Failed to resolve: com.github.chrisbanes:PhotoView:2.0.0
Open File
Show in Project Structure dialog
Error:Error:Failed to resolve: com.github.GrenderG:Toasty:1.1.3
Open File
Show in Project Structure dialog
D:\demo\AndroidModulePattern-master\AndroidModulePattern-master\module_news\build.gradle
Error:Error:Failed to resolve: com.github.franmontiel:PersistentCookieJar:v1.0.1
Open File
Show in Project Structure dialog
Error:Error:Failed to resolve: com.github.chrisbanes:PhotoView:2.0.0
Open File
Show in Project Structure dialog
Error:Error:Failed to resolve: com.github.GrenderG:Toasty:1.1.3
Open File
Show in Project Structure dialog

AndroidStudio 版本3.0

内存泄漏问题

在Presenter层面没有考虑到网络返回后,activity destroy的问题。

.....

你好, 我现在碰到了一个问题. 主Module的Application继承了Common_lib的BaseApplication之后会内存泄漏,请问这个该如何处理呢? 你也可以试试 ,在common_lib的build.gradle文件里面加入leakcanary , 然后在BaseApplication里面初始化 , 运行跑起来 ,进入第一个界面之后就退出 , 什么都不用操作 , 大约七八秒之后就会检测到内存泄漏 , 我找了好几个demo ,只要主module继承了BaseApplication的,都有出现这个问题

路径写错

module_main/src/main/module/AndroidManifest.xml

MainActivity的路径写错了

关于友盟打包的疑问

友盟需要在manifest中配置,那么应该配置在baselib中还是主app中的manifest,同样的,打包代码应该写在哪里呢?

配置了keyfile 却没有key

组件化编译的时候 提示
Error:A problem occurred configuring project ':module_girls'.

No signing config configured for variant release.

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.