我的第一个安卓应用出生过程及总结
一.应用简介
二.开发环境
三,第三方库
四.功能的实现
五.上架流程,签名和打包
六.bug原因及解决
七.学到的知识
一.应用简介
当时选材的时候在新闻类和音乐类中选择了做一款在线播放音乐的app,而且我自己的iOS项目中正好有一款音乐类app,这就省去了P图和抓接口的琐事直接拿iOS中的图片和接口来就能用(由于这边偷懒导致了下面一个困扰我2天的bug)。我做的音乐app叫夜听-故事汇,目前在应用宝和360还有百度管家还有小米商店上架。
二.开发环境
IDE:android studio 2.3.3
应用的最低版本 api4.12 16
开发环境搭建我用1天的时间才顺利写出hello world!这里不得不吐槽下android开发的困境,由于谷歌在退出中国所以很多东西都需要翻墙下载,而且感觉一个开发环境是东拼西凑才搭建完成。
搭建环境需要三样东西 java jdk, android sdk,然后还需要下载as开发工具最后在配置
jdk:mac中自带的所以只需要更新一下
android:需要翻墙去官网下载
as:同上
最后就是配置和更新
对了还有一样的模拟器,用过自带的以后我决定还是真机了。你们懂得
如果不用真机的可以去找一下貌似有一个叫VirtualBox的第三方还可以
不过需要配置一下
最后as的老长辈是eclipse
经过漫长的sdk的更新终于可以愉快的写代码了
三.第三方库
在build.gradle(Module)中导入
比如:
compile 'com.squareup.okhttp3:okhttp:3.9.0'
如果是导入别人写的类中药复制粘贴
项目中用的第三方库
网络请求(要manifests申请网络权限
<uses-permission android:name="android.permission.INTERNET" />)
okhttp
图片加载
picasso
字符串转对象
gson
上啦刷新下拉加载
pulltorefresh
数据库
greendao
图片毛玻璃效果
FastBlurUtil
四.功能的实现
安卓开发一般是在xml布局,然后在activity中通过id找控件并实现一些逻辑
我的主界面是用activity(Fragment+RadioGroup)实现4个标签互相切换
Fragment中通过listview+baseAdapter+item实现数据绑定并显示视图(这里详情请看我另一个文章)
Fragment中与activity用的Intent实现相互传值并跳转
播放界面:musicplayeractivity中xml布局分为头部的导航栏+中部的播放盘和机械臂+底部的播放暂停按钮
功能:后台播放暂停,上一首(),下一首,随机,循环播放,播放完毕自动播放下一首,收藏歌曲
其中当点击播放展厅,和上一首,下一首的时候有一个机械臂摇摆的动画并且中间的imageview要换图片,底部的背景图也换
五.上架
上架必须要签名(意思就是要让人家知道这个应用是谁开发的)
真机测试和模拟器为什么不要签名呢当时我也有这个疑问,后来度娘了一下才知道as帮我们生成了一个debug一个store文件。
签名的化我是用as签名的
另外说一下上架各大商店的时候才知道有一个加固的说法,而且各家的加固不一样。不知道什么鬼,我把在360加古国的apk上传到应用宝的时候竟然还要我加固真是无语
六.开发中遇到的bug
1.oom:原因设置一张背景图的时候没有使用background而是用领一个属性导致
解决:换成background
2.生成apk的时候报错:图片xml文件没有放在drawable中
解决:凡是drawable()的xml文件放到drawbale
3.字符串错误(也是生成apk出现的)
解决在build.gradle(module)
android {
lintOptions {
checkReleaseBuilds false
// Or, if you prefer, you can continue to check for errors in release builds,
// but continue the build even when errors are found:
abortOnError false
}
}
4.按下back返回键时出现intent为空bug
原因:由于我在ab两个界面互相传智,当如果我按back键时没有给intent传智那么就会出现消息吗正确,二intent为空的错误
解决复写onBackpressed(){}方法
5.listview,adpater错误
这是一个隐shi错误,不定每次都出现而且控制台还无法定位
网上说了出现这个bug的原因是在子线程中跟新的adpater的数据而没有通知listview不然就会报这个错误
解决:在主线程跟新adpater数据并且通知listview
mAdatpter.notifyDataSetChanged();
七.学到的知识
学到了开发一个安卓应用的流程和相关知识
学到出现bug能够根据控制台很快的定位到bug
学到相关控件的使用
学到了传智
学到了service的用法
学到了导入三方库的导入和使用
学到了五大布局的相互使用
八:不足
现阶段我知道用什么怎么用,比如控件我用什么,库我要用什么怎么用,而且还没看源码只能实现功能而它的背后我还没有发掘
下一步:学习到为什么用这个,并且会改底层源码
最后附上我的项目的几张截图