美文网首页技术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