1. 对于编辑器的选择。我选择的是Android Studio,而不是Eclipse安卓版,因为单纯的就Java而言,我最开始是在UltraEdit中编写,在javac编译的,后来使用Eclipse,接着是MyEclipse,再接着是Idea,感觉Idea在功能上比MyEclipse强大,而Android Studio在布局配置上和Idea极度相似,所以选择Android Studio。
2. 对于Jar包管理工具的选择和学习。对比之前我写Java代码的时候,对于Jar的管理,我一直使用的是maven,经常浏览maven仓库,后来在接触Android的时候,我经常浏览CSDN或者博客园,里面出现最多的是gradle对Jar包进行一个依赖管理,对比一下,gradle确实比maven使用要省很多的代码,当时学的时候,因为没有考虑版本的关系,把implementation和compile弄混过。
3. 初识对Android Studio里安卓项目中目录结构的理解。我记的特别清楚,在写JavaWeb项目时用Eclipse,MyEclipse,Idea它们三个的目录结构是不一样的,也就是说在这之间导入项目时是会报错的,所以我会首先了解编辑器的目录结构,默认生成目录和配置文件是什么意思,以及各个目录该存放什么模块的东西,为什么一个Android项目中为什么会存在两个build.gradle等。
4. 自己动手创建第一个项目。我创建第一个项目的时候,也是HelloWorld。这里我使用了两种方式来创建。第一种是在创建的时候使用系统默认的创建方式(带那种MainActivity和activity_main.xml)的那种,第二种是自己动手创建MainActivity和activity_main.xml等,通过这个我了解了对于Android Studio中创建一个Empty Activity的过程以及和xml文件的映射情况,以及在xml中的布局的简单了解,接着在manifests目录下的AndroidManifest.xml中添加信息设置默认打开首页。在运行的时候,我最开始选择的是我的安卓手机,而不是模拟器,但是在运行的时候,总是会报错,查了很多的资料,在gradle.properties中添加android.enableAapt2=false,就可以跑了。
5. 对于日志工具logcat的使用。我之前总是喜欢使用System.out.println()来进行一个内容的输出,后来将这一习惯改正了,日志比简单的输出更系统,可以查看之前的版本错误信息等。对于安卓中日志的几个方法也进行了学习,并在编写中使用。
6. 对于安卓中组件的学习。在学习的过程中Activity是我最开始接触的组件,可以类比Java中的swing和awt中对于活动的监听,记得我之前在学swing的时候,写了一个window框,但是却不能关掉,没办法只能将杀死进程才能关掉,后来才知道是因为没有进行活动的监听,在监听里面exit(0)即可。而Activity道理也是一样的,通过指定的xml来指定页面布局,通过id来指定活动,并进行有效的监听。通过继承AppCompatActivity类,重写onCreate方法即可。接着就是对Intent的学习,简单的理解Intent,就是进行活动间的穿梭,它有分为显示的和隐式的,隐式的创建需要在manifests目录下的AndroidManifest.xml配置文件中对<intent-filter>进行修改,接着是对数据在Activity中的传递,会使用到Intent的一些封装好的方法等。Service暂时还没有学习到。
7. 对于SharedPerference的学习。在学习SharedPerference之前,我复习了一下对数据持久化的了解,我最开始看到“数据持久化”这个名词是在学习redis的时候,肤浅的理解就是将内存中的数据同步刷新到磁盘中,他提出了两种方式RDB和AOF,我之前做过RDB。Android中提出了三种方式,分别是文件存储,SharedPerference,和数据库存储。对于SharedPerference的学习很顺利,里面使用到了文件流技术,这个和Java里面是一样的,接着在ADM中的File Explore中可以找到,以及读取文件等。
8. 对于sqlite,adb shell,litepal的学习。sqlite是我接触的一个新的领域,首先这块是我遇到问题最多的地方。首先是对SQLiteOpenHelper的学习,对方法getReaderableDatabase()和getWriterableDatabase()的学习,接着就是在实体类中进行数据库的创建,然后复写onCreate()和onUpgrade()方法,接在是在Activity中注册监听活动,一切显的倒是很顺利,但是在手机运行之后,在终端下面输入adb shell后,进入到指定的目录下,找不到新创建的数据库,通过查询博客,找到原因了,是因为当前是普通管理员权限“$”,而不是超级管理员权限“#”,找到原因了,那就进行改正,但是我想的太简单了,是因为我的手机没有root权限,后来想办法,给目录下面下载一个su文件,但是还是不行,后来我又想打开手机的root权限,安装了很多的软件,都打不开手机的root权限,后来我又把手机进行了一次刷机,但是root权限还是没有打开,说是因为root权限有分为手机厂商自设和第三方的,我用的是中兴手机,root权限是自设的,打不开。后来我查了很多资料,说是使用Android的模拟器可以打开root权限,这时我就安装了模拟机,但是装好了之后,还是打不开root权限,查看不了已经创建的数据库等,原来是因为模拟器的版本太高了,我选择的模拟器的版本是7,如果要打开模拟器版本必须小于6,后来我重新安装了版本小于6的模拟器,果然可以打开root权限,使用sqlite3可以打开指定的数据库,我顺便学了一些关于sqlite的命令,因为我之前学过mysql,redis,
MongoDB等,做了关于是sqlite的增删改查等活动的监听,还做了数据库的升级,关于数据库中属性的添加,增删数据库等。接着是使用litepal操作数据库,首先是在build.gradle中对litepal进行一个包的依赖注入,接在是在asstes中添加litepal.xml文件的编写以形成映射,然后是在AndroidManifest.xml中添加android:name=”org.litepal.LitePalApplication”。紧接着写数据库中表结构的实体类,然后在litepal.xml中进行注入,写到<List></List>中,最后在ActivityMain中进行活动的创建监听,最后在使用adb shell进行数据库的访问,但是我不太喜欢这样创建的数据库,litepal创建的数据库可以类比于Java中的第三方开源框架Hibernate,是一种orm框架,这样通过映射创建出来的数据库,表之间的关系不是很清晰,而且整体的感觉很死板,但是却很这样写出的系统却很稳固,这根数据库有很大的关系,基于这一点,我Hibernate使用相对少点,我更多的是使用SSM整合框架等。
9. 对于Linux的学习。我大二之前Java的开发环境是window,后来大三的时候我的开发环境是ubuntu,对常用的命令有了解,还在一直学习其他的命令,此次对于安卓的学习,是在window下面的。
10. 对于python的学习。我之前自学过一段时间的python和go,会写简单的爬虫,因为当时将重心并没有放到python上面,而是在Java上面,后面我会继续学习python。
11. 对于wireshark的学习。Wireshark是我同学之前教是我使用的,用于抓包。我平时会使用wireshark娱乐一下,我之前使用wireshark抓包发现我们学校的教务系统,尔雅等平台在密码处理上是明文传输的,后来针对这一漏洞,我将我写的第一项目进行了修改,在用户的登陆模块,我们做了一个简单的加密,算是一种对称加密吧,对字符串进行处理,前端是怎样对密码进行处理的,我后台就怎样恢复成原状,这样虽然说在传输过程中也是明文传输的,但是在路由传输中即使被坏人路由拦截了,对他们来说也是一些没有用的信息。
12. 对于git的学习。对于版本管理以及代码托管,git和svn我都有使用过。对git的命令有了解和使用。
13. 我最近在做一个天气查询的app。
14. 在音频和视频的学习方面,我中途遇到了一些问题,例如程序写好之后,启动不了,打不开音频等,这个我最近一直在排查错误,修改代码等。
15. 接下来的两周,因为每周都要进行考试,所以时间会有点紧张。我会把时间适当的减少一点,这两周我学习的重点是对 CPU、内存、流量、IO、耗电等测试方法和音频,视频理论的学习。
16. 我谈一下对安卓的理解:我们平常在实验室的学习过程中会对一些WEB项目,给它适配移动端,再用HBuilder打包成webapp,webapp的出现打破了传统app的制作观念,而且还有一种就是将web项目上线,将链接地址放到loadUrl方法调用,将其设置成默认首页,但是这样做都不是太安全,有网的情况下倒还可以访问,在没有网的情况下,就会请求失败。
还有就是我大三之前在写JavaWeb项目是会将接口与web页面放到同一个项目下面,然后打包成war包,部署在服务器上面,我觉得这样不是太安全,虽然部署的war包里面没有直接的.java文件,但是却有.class文件,一旦反编译一下,代码就会直接暴露了,后来我大三的时候就尽量在开发机上面进行接口的编写,将接口放到云端,再将接口放开,以供第三方平台进行调用,本地的话,直接调用接口即可。我觉得安卓的编写也是一样的,就拿天气预报的app一样,都是去请求第三方的接口,返回json数据,再去解析json数据,返回给前端,在进行视图的解析,以可视化的图形展示出来。