(一)安卓框架搭建之项目分层、主题、gradle基本配置

前言

框架重要性不言而喻,一个好的框架可以大大提高后期开发的效率和质量。接下来将分七篇文章讲述安卓框架的搭建,框架中用的是当前比较主流的元素,也是相对成熟稳定的。讲述的内容参考了很多相关的资料,绝大部分也是经过一番思考和论证。文章既为分享,也为总结!

主要涉及的知识点如下(所列内容不分先后):

  • 1.通信框架: Retrofit2+Okhttp3+Rxjava2
  • 2.项目结构: MVP
  • 3.图片处理: Picasso
  • 4.View的绑定工具: Butterknife
  • 5.MaterialDesign风格: CardView、MaterialDailog等
  • 6.权限处理Easypermissions、android N读写文件路径
  • 7.涉及到BaseActivity的封装,BaseFragment,MainActivity
  • 8.错误日志保存编写
  • 9.RecycalView和Adapter的封装
  • 10.常用工具类的封装
  • 11.数据库操作GreenDao的使用
    1. AgentWebview的使用

部分代码可能因为比较简单或者比较基础并没有在文章中提及,有兴趣的同学可以到源码中查看。好了,那么我们就从新建项目开始吧!!!

新建项目并分层

我们代码里经常会建package来分门别类的管理代码,同样,我们也需要建不同
module来管理我们的框架层,业务层等

1.新建项目

项目名称为FrameworkDemo,包名为com.example.burro.demo,第一个Activity的名字命名为LoadingActivity

工程目录

2.项目分层

在此案例中,我主要把项目分为app入口层,主体业务层(app主体业务层、data主体业务层)和项目库层(app基础框架层、data基础框架层、其他引用库)。后面讲gradle基本配置的时候,我还会对资源文件根据功能模块进行分层。分层的好处是显而易见的,层次分明、容易维护。项目的分层和项目业务是分不开的,如果你的项目只有几个页面,可能没必要分的那么细。如果你的项目页面、功能模块较多,那我建议还是分门别类,规规矩矩的来。另一个好处是,如果有新的项目要开发,那么把这套项目库层【底层框架】搬过去。只需两三个小时,完全可以进行新项目的业务开发工作。

下面新建库和文件夹:

  • 新建名为appbiz的Library, 包名 com.example.burro.appbiz
  • 新建名为databiz的Library,包名com.example.burro.demo.databiz
  • 新建名为appframework的Library,包名com.example.burro.demo.appframework
  • 新建名为dataframework的Library,包名com.example.burro.demo.dataframework
  • 新建文件夹bizmodule
  • 新建文件夹libmodule

此时settings.gradle 中内容如下

include ':app', ':appbiz', ':databiz', ':appframework', ':dataframework'

把appframework和dataframework移动到libmodule文件夹下,把databiz和appbiz移动到bizmodule文件夹下,如下

修改settings.gradle里的内容在相应的module前加上文件夹名称 如下

include ':app', 'bizmodule:appbiz', 'bizmodule:databiz', 'libmodule:appframework', 'libmodule:dataframework'

Clean后再编译项目。当libmodule、bizmodule文件夹上出现了小杯子,完成分层!

设置主题

主题是全局的样式属性。
打开app模块的清单文件,在application节点下有个android:theme="@style/AppTheme",点击进入AppTheme



可以看到有三个颜色值 colorPrimary,colorPrimaryDark,colorAccent,如下



这几个主题属性颜色与页面效果关系可以用一张图来描述:

修改AppTheme内设置如下
<resources>
    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>

        <item name="android:textColorPrimary">@color/textColorPrimary</item>
        <item name="android:windowBackground">@color/windowBackground</item>
        <item name="android:textColorSecondary">@color/textColorSecondary</item>
    </style>
</resources>

需要把颜色改成我们APP对应的值:

<resources>
    <!--<color name="colorPrimary">#3F51B5</color>-->
    <color name="colorPrimary">#FF306BC5</color>
    <color name="colorPrimaryDark">#FF306BC5</color>
    <color name="colorAccent">#FF4599DF</color>
    
    <color name="windowBackground">#ffffff</color>
    <color name="textColorPrimary">#000000</color>
    <color name="textColorSecondary">#f6f6f6</color>
</resources>

这里补充一句,全局view的样式基本上都可以在这里统一设置。例如想要把ScrollView纵向滚动条的颜色修改为红色,可以这样设置

 <item name="android:scrollbarThumbVertical">@color/red</item>

【注意:因为这些属性是全局通用。我把它移动到appfamework工程对应目录下【原本没有,需要新建】

也不要忘了依赖工程,这里依赖关系如下
dataframework>appframework>appbiz
dataframework>databiz
databiz>appbiz>app

  • 在app工程build.gradle内的dependencies内增加
 compile project(':bizmodule:appbiz')
  • 在appbiz工程build.gradle内的dependencies内增加
  compile project(':libmodule:appframework')
compile project(':bizmodule:databiz')
  • 在databiz工程build.gradle内的dependencies内增加
  compile project(':libmodule:dataframework')
  • 在appframework工程build.gradle内的dependencies内增加
  compile project(':libmodule:dataframework')

gradle基本配置

gradle的配置需要全局管理,即绝大部分依赖包或者版本号都将在项目(Project)的build.gradle内设置,各工程(Moudle)的build.gradle直接引用。不得不说gradle着实强大,由于网上有很多gradle的配置教程,讲述的也很详细,这里不再赘述。直接贴代码

项目(Project)的build.gradle:

原本内容不变,在根目录下新增如下

//外部使用的安卓版本相关
ext {
    minSdkVersion = 15
    targetSdkVersion = 25
    compileSdkVersion = 25
    buildToolsVersion = '25.0.2'
}
//文件内部使用
def supportLibraryVersion = '25.1.0'
//compile依赖的第三方库
ext.deps = [
        //android
        supportCompat         : "com.android.support:support-compat:$supportLibraryVersion",
        supportAnnotations    : "com.android.support:support-annotations:$supportLibraryVersion",
        supportRecyclerView   : "com.android.support:recyclerview-v7:$supportLibraryVersion",
        supportV4             : "com.android.support:support-v4:$supportLibraryVersion",
        supportappcompatV7    : "com.android.support:appcompat-v7:$supportLibraryVersion",
]
工程(Module)的build.gradle:

以libmodule/appframework下的build.gradle为例进行设置,如原本defaultConfig内的compileSdkVersion 25 现在可以设置成compileSdkVersion rootProject.ext.compileSdkVersion
原本dependencies内的compile 'com.android.support:appcompat-v7:25.3.1'现在可以设置成compile deps.supportappcompatV7
整体下:

apply plugin: 'com.android.library'

android {
    compileSdkVersion rootProject.ext.compileSdkVersion
    buildToolsVersion rootProject.ext.buildToolsVersion

    defaultConfig {
        minSdkVersion rootProject.ext.minSdkVersion
        targetSdkVersion rootProject.ext.targetSdkVersion
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}
dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile deps.supportappcompatV7
}

其他各个工程module也类似设置。后续会依赖很多第三方优秀库,依赖的方式和appcompat-v7一样

相关链接

(二)安卓框架搭建之项目Butterknife引入,Application的简单封装

github源码地址

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,980评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,178评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,868评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,498评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,492评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,521评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,910评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,569评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,793评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,559评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,639评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,342评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,931评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,904评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,144评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,833评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,350评论 2 342

推荐阅读更多精彩内容