美文网首页技术iOSAndroid收藏集
一个优秀的Android应用从建项目开始

一个优秀的Android应用从建项目开始

作者: Jude95 | 来源:发表于2015-07-23 14:25 被阅读65894次

1.项目结构

现在的MVP模式越来越流行。就默认采用了。
如果项目比较小的话:

  • app——Application Activity Fragment Presenter等的顶级父类
  • config——API,常量表等
  • model——数据层
    • entities——数据模型
  • presenter——MVP的P
  • service——服务
  • ui——MVP的V
  • utils——工具类集合
  • widget——各个可复用View集合

如果项目比较大,上面的方式一定会造成presenter和view里近百个文件。看瞎眼系列。推荐下列方式:

  • app
  • config
  • model
    • entities
  • module——将界面层以功能模块分配包。
    • launch
    • main
    • account
    • news
    • music
    • ……
  • utils
  • widget

2.配置主题

对于不遵守Material Design的项目无视这一步。

1.先在color.xml中写好需要的颜色:

<resources>
    <color name="Orange">#ff5722</color>
    <color name="DeepPurple">#673AB7</color>
    <color name="DeepPurple900">#311B92</color>
    <color name="White">#fff</color>
    <color name="Gray">#888888</color>
    <color name="Gray100">#dddddd</color>
    <color name="Gray600">#999999</color>
</resources>

注意color.xml是配色表。应该是描述颜色而不是对字体颜色,背景颜色等的定义。这样能防止相近的颜色重复定义。而导致界面颜色不统一。

2.在style.xml里定义主题:

<style name="AppTheme.Base" parent="Theme.AppCompat.Light.NoActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/DeepPurple</item>
    <item name="colorPrimaryDark">@color/DeepPurple900</item>
    <item name="colorAccent">@color/Orange</item>
</style>

<style name="AppTheme" parent="AppTheme.Base"></style>

在res目录下,创建一个values-v21目录,再创建一个style.xml:

<style name="AppTheme" parent="AppTheme.Base">
    <item name="android:windowDrawsSystemBarBackgrounds">true</item>
    <item name="android:statusBarColor">?colorPrimaryDark</item>
</style>

然后在AndroidManifest.xml文件中修改application的theme属性为上面定义的AppTheme.即可实现沉浸式状态栏。

然后关于Theme与Toolbar的详细设置参考我另两篇博客:
http://www.cnblogs.com/Jude95/p/4369816.html
http://www.cnblogs.com/Jude95/p/4370176.html

3.依赖库与SDK

必选的库:
gradle-retrolambda——Android的lambda表达式插件
fresco——Android最屌图片加载库
material-dialogs ——Material Dialog向下兼容库
material-ripple——Ripple向下兼容库
fastjson——最快JSON解析
butterknife——View注解库和配套插件android-butterknife-zelezny
ActiveAndroid——数据库注解库。
RxAndroid——Rx函数响应式编程中文文档
retrofit,okhttp,sqlbrite,okio——Square家的精品多啊
compile 'com.android.support:design:23.0.1'——谷歌Material Design控件库

下面安利几个自己写的库,如果有什么建议欢迎交流:
Utils——Android各种小功能集合
RollViewPager——自动轮播使用方便的ViewPager
EasyRecyclerView——支持下拉上拉刷新等功能全面的RecyclerView
SwipeBackHelper——Activity滑动关闭支持库,能达到微信效果

尝试了很多,这几个是现在常用的。
融云——即时通讯
友盟——数据统计,推送,意见反馈,自动更新,第三方分享及登录,社区
七牛——云存储
Mob——短信验证
Bmob——做后台不求人

依赖这一大堆库和SDK以后。建议在合适的时机初始化他们,而不是全堆在Application的onCreate()里面。这样会导致启动时间过长。启动后也会较卡。虽然是不会影响功能正常使用。

4.配置Gradle

某些SDK运行时需要检查签名是否正确。所以在debug模式时也必须用正式KEY签名。而把签名放进版本控制不是明智的做法。所以推荐下面的做法:
在app的gradle加入下面代码

Properties props = new Properties()
props.load(new FileInputStream(file("signing.properties")))
android {
    signingConfigs {
        release{
            keyAlias props['KEY_ALIAS']
            keyPassword props['KEY_PASSWORD']
            storeFile file(props['KEYSTORE_FILE'])
            storePassword props['KEYSTORE_PASSWORD']
        }
    }
    buildTypes {
        release {
            signingConfig signingConfigs.release
        }
        debug {
            signingConfig signingConfigs.release
        }
    }
}

在app的gradle文件同级目录新建signing.properties文件,里面填入你的key的相应信息

KEYSTORE_FILE = C:\\Users\\Mr.Jude\\Documents\\Android\\HelloWorld.jks
KEYSTORE_PASSWORD = xxxxxx
KEY_ALIAS = xxxxxx
KEY_PASSWORD = xxxxxx

将signing.properties添加进忽略目录。
其他人pull下来代码后。自己新建signing.properties填入相应信息后即可编译成功。

5.制定开发规范

为了避免合作开发写的代码风格迥异。或做出了多套开发模式。下面是个例子。毕竟是为了高效开发而制定的。适合自己项目的才是最好。
所有Activity继承BaseActivity
所有Fragment继承BaseFragment
所有Presenter继承BasePresenter
这样利于生命周期管理。也可以方便的全局修改。
命名,例
AccountFragment
UserDetailActivity

layout命名,例
activity_collection
fragment_account
item_person
include_toolbar
view_progress
不过对于庞大项目的开发。近百个activity开头的layout列表还是会眼瞎。所以那种情况会在前面加上模块名。

id命名,例
btn_send
tv_name
list_persons
et_password
然后用butterknife的插件生成变量会自动将下划线变成驼峰命名

变量命名:以m开头。例mAdapter使用时按一个m全都出来了
方法命名:与其写好名字不如写好注释。= =。

TextView使用官方标准字体

TextView.png
style="@style/TextAppearance.AppCompat.Display4"
style="@style/TextAppearance.AppCompat.Display3"
style="@style/TextAppearance.AppCompat.Display2"
style="@style/TextAppearance.AppCompat.Display1"
style="@style/TextAppearance.AppCompat.Headline"
style="@style/TextAppearance.AppCompat.Title"
style="@style/TextAppearance.AppCompat.Subhead"
style="@style/TextAppearance.AppCompat.Body2"
style="@style/TextAppearance.AppCompat.Body1"
style="@style/TextAppearance.AppCompat.Caption"
style="@style/TextAppearance.AppCompat.Button"

Button使用Material Design标准样式

Button.png
style="@style/Widget.AppCompat.Button"
style="@style/Widget.AppCompat.Button.Borderless"
style="@style/Widget.AppCompat.Button.Borderless.Colored"
style="@style/Widget.AppCompat.Button.Small"

定好网络请求写法。文件存储方式与位置。写好项目所使用的类库框架用法。

好了,下面就开始正式开发吧!如果有什么建议欢迎交流。本文也会即时修改。

相关文章

网友评论

  • Todo2:写的非常不错,赞
    组件化和插件化的开发里程总结
    https://www.jianshu.com/p/df2a6717009d
  • 吧主:A very good article, Keep up.
  • honglei92:很实用,楼主吃可爱长大的吧。
  • 3674d0183b56:有空好好看看
  • cecf77d689c0:多谢楼主的分享,学习
  • 乄终极:不错
  • KaelQ:修改意见:1.还有图片尺寸文件放置问题。2.语言切换问题。(又帮作者挖了一个小坑):no_mouth:
  • XLsn0w:吃惊, 正在自学android, 多多分享,很不错!
  • 3cf4933d1229:讲的都是很简单,的
  • 吧主:楼主,这篇文章我给你在公众号原创首发可以吗?感觉大神写的很棒,我想让更多的人看到你的文章。公众号:杨守乐(ysle_0313)
  • lynch0571:已收录《千赞专题》,欢迎关注:http://www.jianshu.com/collection/032a478c3dbf
  • 年轻的爱是个善良的哑巴:去年从ec转到了AS。感觉as好强大,但是还有很多不懂的地方。希望多贴一些as方面的知识
  • Turaiiao:学到了
  • gyyak:不错
  • 136cc556be72:这个大纲不错
  • cf908b4323ca:很好,学习了。
  • zhaochengqi:很强势,一直想做这件事。向你学习😁
  • 3674d0183b56:很好的文章,只是感觉还可以补充全面点哦!
  • luo2016:赞一个 :+1:
  • 5cf77dedd2b5:不错!!!
  • ximencx: :+1: :+1: 大哥,,看了你的github和博客,,佩服啊
  • 大鴈:学习了
  • 4259933971e8:刚学习android,加油!
  • 小名约翰:很棒的总结,很有指导性
  • 捡淑:给力
  • IBLV_cui:谢谢
  • Watire:好文:+1::+1::+1:
  • 649c6f1ec2e4:学习了
  • 小乙V:楼主,有个问题想咨询一下,在使用easyrecyclerview库的时候,在adapter的getItem中出现了无法将数据转换成对象的问题,还请帮忙解答一下。(json解析无误,待getItem的时候按道理应该是从List<T>中获取一个T对象,但无法获取到)
  • 一只余:好东西
  • 在日留学生:如果按照颜色显示的位置定义颜色,后期改起来,那叫一个爽
  • 在日留学生:我不赞同你把颜色定义为描述的做法,因为如果在项目开始的时候,有10个地方都用了orange,后来要该需求,将其中一处改为另一种颜色,这个时候就很麻烦了
    Watire:@Andecy 谷歌等设计规范也是这么推荐的哦
    在日留学生:@Jude95 如果能够遇到这样的设计师固然好 :joy:
    Jude95:@Andecy 这和设计师的习惯相关。我觉得这样的方式是设计上的优秀习惯,我这边的视觉给我的文档直接就1套配色表,10多个颜色。一套图几十个界面全基于这些颜色。就算后期要改也是从一种颜色改成已有的另一种颜色。基本不会创建新颜色。
  • jackLee:干货 谢谢
  • xcxad:写的真好!
  • 大利猫:本人最近遇到些烦恼 大公司 大团队里面想引进新技术新架构很困难 很多人不愿改变
    Jude95:@大利猫 对~这得公司先有一定技术氛围(技术博客,分享会什么的)。新血液的注入。试验性项目。 :joy: 瞎猜的,并没有大公司工作经验。不过听很多人吐槽公司还用Eclipes什么的,不新还没什么,落后就吃枣药丸了。
  • yoyochoo:很好很好!感谢分享!
  • Li7tleMK:楼主问下,TextView使用官方标准字体,Device和Desktop分别表示什么?
    Jude95:@Li7tleMK 应该是手机和平板吧。
  • 68768b474bfc:好文,👍
  • 发黄的小草:作者好用心啊!
  • 607fa52cec78:写的很清晰,很有帮助,谢谢
  • 6588848ee2c0:明白好多,非常感谢
  • 4279a282cd47:相当不错
  • db8672a1bee3:收藏了
  • 542c5b26283d:很好很强大!
  • 水底鱼:如果使用 volley的话 推荐使用 okvolley,这个作者封装的很好 ,传输层使用 okhttp,应付各种网络操作游刃有余,不管是 get post 甚至文件上传
    水底鱼: @michaellct 是用 part 添加文件,然后参数用 param ,
    水底鱼: @michaellct 用 param就可以了
    michaellct:@水底鱼 post文件和其他参数时调用不成功 请问是需要怎么操作?
    用part传递文件 其他参数也适用part还是用form呢?都试过没有成功
  • 水底鱼:dialog不用依赖第三库了,v7的22版本以后已经加入了 dialog compat,总结的很好,和你这样的人一起开发必然是乐事一件
  • sing_song:写的不错,加油
  • f0c9cebb7743:能不能提供已经建好的项目框架 包含 基础的资源引用 基类等都做好 每一个项目都可以直接在此项目基础上进行开发,并提供 `git` 版
    f0c9cebb7743:nice work!! just DO it. Followed U.
    Jude95:@ewrfedf 嗯,正在做 https://github.com/Jude95/Beam 可能还不是很完善。有什么建议欢迎提issue。 :blush:
  • b532a101c0ac:你好,第三方库放在哪个目录下?
    Jude95:MVP很合适啊。呃对于10个以上页面的项目来说。谷歌开始支持MVVM(http://www.jianshu.com/p/92f0efd695e7),不过感觉效果还是不够好毕竟受java语言的限制。开发框架的话以前倒是有不过Android的发展速度早过时了,呃,我写了一个 :smirk: (https://github.com/Jude95/Beam)。好的设计模式应用的话一定要说Retrofit + okhttp + Rx + dagger + mvp。我理解的也不深入。不过很重要一点不要为了使用框架而去使用框架。选择最适合项目的方式。
    b532a101c0ac:@Jude95 受教了,我还有一个很重要的问题要请教你,Android应用开发MVP模式适合吗?还是有其他更好的开发框架或者设计模式?
    Jude95:@yql_wave gradle的依赖管理。不需要自己放第三方库代码啊。只有某些情况比如需要修改第三方库源码,或者集成第三方SDK。另外建一个module放你的版本的第三方库再添加依赖。也便于以后项目的复用。
  • lsxiao:挺不错 :blush:
  • adb8cf0906c7:你好,我想问下那个字体和按钮设置的风格是哪里设置的,我似乎没找到这个东西
  • Weir:越看越觉得赞
  • 大侠咕咚:感觉没讲完,期待更新!
  • 唯有变化是永恒Daisy:能附一张 项目的结构图么?各个包以及他的作用
  • Holyn:与其写好注释不如写好方法名~~
  • 天堂迈舞:朱大高产
  • 44314d6780a5:拜读了!
  • Weir:很棒,但现在很多设计都偏向IOS的设计,很难在工作中做出Android的味道
    水底鱼:@Weir 多骂骂你们的产品经理
  • 关生:很不错的文章
  • Typer:总结的很好,收下了。
  • dc3933068d53:个人感觉 爽爆了。新欢就收藏
  • 小白菜啊:挺好的,一起加油思密达
  • dinfer:学习了,觉得很不错。期待后面的文章。
  • 荔枝壳:对新手很有帮助
  • b05ef00f2473:感谢你的分享
  • lewiswon:Volly应该是Volley吧?
    Jude95:@lewiswon 感谢纠正我错用了2年的英文。。。
  • ningso:👍赞
  • wenhuaijun:业界良心,叼叼的
  • MrFu:Cool,很全面喔
  • 哈皮阿呆:good,期待更新
  • fb879d10f593:我点开EasyRecyclerView的连接。看了下标星的量然后再看看分享者。。第一感觉类似软文。。较干的干货里面夹杂着软文。。。不过能有分享也挺不错的。希望可以写得更详细一些
    Jude95:@Kuan 其实只是想给学校社团的学员总结一下,这几个自己写的库也只是技术交流(= =哪有软文软开源库的)。感觉简书不错就试试在这上面写。真没想到有这么多人看。。。。学习中..待技术学好了一定完善。
  • 981e1afff902:好像不是很详细,感觉没讲完似的
  • 尛坏蛋:就讲了一半,都是些皮毛
  • HuDP:nice. 请教个问题. 项目比较大 那presenter 放在最外面好 还是放在module里面呢?
    HuDP:@Jude95 nice 明白了..
    Jude95:@HuDP 在module里放一起,因为开头名字一样,这样就和对应activity挨着。维护时就不用找了。 :blush: 谢谢各位支持~
  • hackest:MVP的架子还是很棒的😳
  • 0d16382f7309:很详细 厉害 赞一个
  • 刻舟求剑KJ:谢谢分享
  • 28592d64752b:不错不错,很棒
  • ilaoke:mark
  • 7de928b3e4a2:棒棒哒
  • alighters:很赞 mvp对安卓来说是非常有用的
  • 刘亚涛:thx!
  • 8702b896b0d9:走过路过飘过
  • 32914f54526b:太需要这个了!谢谢你!
  • 小鄧子:很棒
    妙法莲花1234:@lhl_012 https://github.com/huntermr/FastAndroid
    lhl_012:能不能给个baseActivity,baseFragment,baseView,basepresenter?刚刚开始使用
    橡樹先生:@小鄧子 1楼呢?

本文标题:一个优秀的Android应用从建项目开始

本文链接:https://www.haomeiwen.com/subject/mnapqttx.html