按照目前我接触到的功能,大概划分下
模块化
1.独立出硬件相关,提供硬件服务
2.界面和业务逻辑 使用H5(flutter cordova)
flutter也是纯粹独立业务逻辑而已,跟硬件相关还得IOS和Android提供插件支持,所以一套代码适用两个平台说的也仅仅是业务逻辑,不涉及到硬件层面,一个公司涉及的硬件层面得有多少,从节约人力成本来说是值得推荐
RN是用同一个代码语言去写两套代码
1.框架 数据库,网络,缓存模式,H5交互(cordova)
2.带有主题并控件化,而且例如输入框这种 统一处理 有清空功能的
3.第三方服务 okhttp/XUTILS,七牛,环信,友盟分享,统计,百度定位,热更新等
4.基础功能 例如引导,设置(关于,升级等)
5.业务功能 (首页,注册,登录,修改密码,重置密码)
架构现在流行组件化,参考
http://blog.csdn.net/guiying712/article/details/55213884
https://github.com/mzule/ActivityRouter 做为跳转
http://www.jianshu.com/p/c696acb74bd2
大的业务考虑插件化
内存优化
https://www.zhihu.com/question/30138734
细节实现考虑MVP,MVVM,MVC
framework 在线看代码 http://androidxref.com/
看到另外一个层面的划分结构:http://www.jianshu.com/p/42d45998117f
目前发现两种架构方式
1.普通架构 以Activity为底,我主要用了两个基础activity,一个登陆前,一个是登陆后,登陆前不需要校验直接调用后台接口,登陆后需要校验后才可以使用接口,校验指后台安全性校验,封装类似,主要封装了网络判断,加载动画,隐藏键盘,禁止根据系统设置改变字体大小,动态申请权限等
2.同一个activity,以fragment为底的基础架构,每一个都是fragment,fragment会比activity轻量一些,但是也更容易出现很多坑
http://www.jianshu.com/p/38f7994faa6b
混合开发分为三种:
1.简单,纯粹展示一些静态页面,webview,加Js桥,自己封装通过js传递string,图片base64,文件不怎么传
2.稍微麻烦点,类似cordova,封装好了一些基础,传递文件二进制,String等,有完善的插件模板还有UI模板,只需要自定义一些特殊,比如自定义了七牛上传特殊插件等
3.完全不一样,使用同一种语言来写不同平台的reactNative,类似JS语言来控制原生界面显示和逻辑,基本上原生关系不太大了,学习成本高
组件化封装一个 Android业务组件化之URL Scheme使用 参考:http://www.cnblogs.com/whoislcj/p/5825333.html 可以标准化参数和跳转
VR 其实就是平铺的openGl的球型图片,当然视频是怎么做到,还没太清楚,按道理应该是类似的,球型播放
可以利用谷歌的VR播放器。https://github.com/linglongxin24/VRDevelopVideo
AR Unity3D显示3D图形在屏幕上 http://www.arvrschool.com/read.php?tid=325&fid=21
UI:
1.引导界面
2.注册界面
3.登录页面
4.主界面(微信式下分页,QQ式侧滑分页)
5.设置界面
6.关于界面
7.升级检查更新 有升级标志位,强制升级,提示升级,静默安装
8.意见反馈
9.其他(看需求)
a.activity 生命周期 栈模式
b.server bind模式,声明周期 前台服务
c.broadcastreceiver 静态和动态注册
d.Content Provider 对外暴露提供数据库接口(http://www.cnblogs.com/chenglong/articles/1892029.html http://www.2cto.com/kf/201404/296974.html)
e.application
10.控件自写
a.集成(已有控件集成在一起)
b.自写(根据控件手动画一个控件,没有已有控件支持)
c.继承(在已有控件基础上自己添加新功能以适合独特APP使用)
11.动画效果
12.3D展示
其他功能:
13.JNI NDK C类库调用
14.代码混淆 加壳编译等 加密
15.网络交互
a.SSL()和普通HTTP请求
b.支持断点上传下载
c.网络状态判断(WIFI,移动,断网)
d.网络传输(文字,文件)
(1)文字传输 (XML,JSON)
(2)文件传输(传输前压缩,文件流直传)
e.代理
f.线程池管理
g.多线程交互 同步和异步
h.HTTP与局域网内SOCKET
16.数据存储
a.SQLITE (可以使用第三方框架greenDAO 或ActiviteAndroid)
b.文件存储
c.sharepreference
d.网络存储
17.媒体播放(图片,音乐和视频)
18.图片处理
a,图片变形压缩转换
b.异步下载
c.缓存CACHE
19.工具包
a.常量
b.LOG分级控制记录上传等(http://bugly.qq.com/androidfast) ANR CRASH 其他类型LOG
日志分为3种 Crash日志 用户业务操作日志(后台处理) 用户行为日志
c.本地保存
20.地图功能(百度SDK http://lbsyun.baidu.com/sdk/download)
21.推送功能(百度SDK http://push.baidu.com/ http://developer.baidu.com/platform/catalog/navigation-c/node/n301 也可以使用其他第三方,或者自己写)
22.用户统计
23.硬件设备
a.蓝牙
b.传感器(重力,加速度,方向,光线,GPRS等)
c.NFC
d.摄像头(二维码,人脸识别,卡号识别,拍照)
e.录音
f.wifi
g.GPRS
24.搜索(应用内搜索,网络搜索,语音搜索)
25.即时通讯(环信 http://www.easemob.com/downloads)
26.分享和第三方账号登录(sharesdk http://wiki.sharesdk.cn/ http://www.cnblogs.com/smyhvae/p/4585340.html)
27.支付集成(微信,支付宝,网银)
28.APP对外的接口(AIDI,还有其他自定义广播等)
29.辅助功能服务(例如抢红包辅助功能http://blog.csdn.net/jwzhangjie/article/details/47205299 )
30.hybird网页混合开发模式
最普通一种修是webview加载H5页面,然后回调Android或IOS原生接口(http://www.tuicool.com/articles/m6RVFfA)
当然还有其他的框架,有些针对于纯前端开发者的
31.自动化编译 Android studio 针对gralde (http://blog.csdn.net/voiceofnet/article/details/45197883) Ecplise针对ant(http://blog.csdn.net/webwalker/article/details/24796347)
32,pdf开源组件 vuAndroid 有些格式PDF不支持,例子:http://download.csdn.net/detail/z157794218/9517512
支持比较好的mupdf http://download.csdn.net/detail/z157794218/9518361
33.使用Android6.0以后权限需要检查后申请,参考 http://www.cnblogs.com/cr330326/p/5181283.html
别人讲基础和进阶
http://blog.csdn.net/liuhe688/article/details/9494411
第三方开源代码:
http://blog.csdn.net/shulianghan/article/details/18046021
http://blog.csdn.net/zhaihaohao1/article/category/3162599
http://blog.csdn.net/oyangyujun/article/details/43340893
http://www.open-open.com/lib/view/open1436262653692.html
https://github.com/Trinea/android-open-project
替换主题 https://github.com/burgessjp/ThemeSkinning(封装的) https://github.com/fengjundev/Android-Skin-Loader
按钮在线制作图片 http://angrytools.com/android/button/
34.字体大小 不跟随系统字体改变 http://blog.csdn.net/zhuqiang1002/article/details/38756127
自定义设置字体大小 参考 http://blog.csdn.net/u011730649/article/details/42872923 其他方面
字体适配可能需要自己定义主题来做会更好些 http://www.cnblogs.com/likeandroid/p/4501758.html
35.阴影添加 https://github.com/Hitomis/CrazyShadow
36.开始代码编写简化第三方库文件 事件消息传递eventbus http://blog.csdn.net/harvic880925/article/details/40660137
Retrofit注解 http://www.jianshu.com/p/308f3c54abdd
rxjava http://gank.io/post/560e15be2dca930e00da1083
图片拍照选择器:
https://github.com/jeasonlzy/ImagePicker
https://github.com/easonline/AndroidImagePicker
https://github.com/pengjianbo/GalleryFinal
glide 图片缓存 https://github.com/bumptech/glide
Robust 热更新 http://tech.meituan.com/android_robust.html
Tinker热更新 http://www.tinkerpatch.com/
工具类 https://github.com/Blankj/AndroidUtilCode
http://blog.csdn.net/dj0379/article/details/38356773 XUtils 支持下载大文件,断点续传
好用吸色器http://www.getmarkman.com/#/download-modal
这只是我自己划分以及知识点,如果有不足,期望大家补充说明
ScrollView和recyclerView嵌套,有个简单方法。
ScrollView改成NestedScrollView,recyclerView.setNestedScrollingEnabled(false);加上这两句问题就解决了
scrolliview一直滑到最底部 scrollto失效
scrollView.post(new Runnable() {
@Override
public void run() {
scrollView.fullScroll(ScrollView.FOCUS_UP);
}
});
toast 在乐视pro3上手机无法显示
http://blog.csdn.net/qq_25867141/article/details/52807705
记录一个工具 ImageOptim 专门用来优化图片大小,减小APP大小
一个有意思的移动端数据问题
http://blog.csdn.net/ceko_wu/article/details/45244295 CursorAdapter优化排序和显示问题
如果有NDK支持,其实也使用C层直接寻址排序和寻找
AndroidStuido的插件
https://www.jianshu.com/p/d76b60a3883d
https://blog.csdn.net/zheng_weichao/article/details/72961791
gradle多渠道打包
https://www.jianshu.com/p/4677efee7214