Android开发

来源:互联网 发布:windows按键双系统切换 编辑:程序博客网 时间:2024/06/11 13:01

Android开发

sf2gis@163.com

2015年12月26日

2016年1月11日增加GUI模型

1  目标:在Android系统开发应用,并发布APK。

开发、调试、测试、日志等并发布APK。

2 原理:使用AndroidStudio(自带SDK,下称AS)开发。

参考:疯狂Android讲义第2、3版。

3 流程:安装AS,编写程序,发布APK。

参考:http://jingyan.baidu.com/article/90895e0fce970264ec6b0bf2.html

3.1 安装AS:官网安装JDK(参见Java),官网下载AS(需使用迅雷,无法直接下载),默认安装。

3.2 编写程序

3.2.1File->New->New Project(如果是首次进入AS,会出现QuickStart界面,选择NewProject)。

3.2.2输入程序名称和公司名称作为包目录。

3.2.3选择SDK(默认15)和Blank Activity。

3.2.4设置页面(默认):

3.2.5程序将自动创建Hello,World页面。

3.2.6修改页面:选择Content_main.xml,选择界面上的Label,在右侧的text属性中设置为HelloWorld,Android!。

3.3 运行,选择运行设备(本机采用真机调试)。

注意:如果装有豌豆荚,可能会导致ADB无法启动,请关闭所有相关的exe进程。

3.3.1设备显示HelloWorld,Android!界面。

3.4 导出APK:设置加密签名,导出

参考:http://chenfeicqq.iteye.com/blog/1889160

3.4.1Build-》导出APK。

3.4.2如果没有签名,需要先建立签名;如果有,可以选择已有的。

3.4.3选择导出目录,完成后可以查看生成的APK。

4 方法:Android系统程序开发模型

参考:android高级编程,疯狂Android讲义。

4.1 系统模型:OS统一管理程序单元和系统资源

参考:http://blog.sina.com.cn/s/blog_55b1b0d50100i8k9.html

操作系统管理进程、线程、回收等资源。APK、Activity、Service等都是程序单元和组织,由系统统一管理。

Andorid系统模型类似一个互联网,OS作为服务器管理硬件资源,程序作为网站向外提供服务。

OS:统一管理程序单元

-|进程,由OS统一管理、回收,程序单元无法控制

--|线程,由OS统一管理、回收,程序单元无法控制

4.2 程序结构:程序单元的组织

类似HTTP服务,网页由Activity模拟,Web服务由Service模拟,TCP、UDP由intent/intentFilter、ContentProvider/ContentResolver、BroadcastResolver/*.sendBroadcast模拟。

4.2.1总体配置:AndroidManifest.xml。

管理全局属性,配置程序单元。

4.2.2前端View:Activity作为一个视图。

组织结构:

Activity:逻辑组织(类似JS),处理Res的Layout等View元素。

Res:常变资源(类似HTML),将被编译为R.java的类,从其中直接操作XML中定义的资源。

4.2.3后端Model:Service提供服务。

需要connect或bind到Service才能使用服务。

4.2.4前后端交互Controller:intent/intentFilter提供控制器功能。

4.2.5进程间通信:ContentProvider/ContentResolver。

4.2.6广播-订阅消息:BroadcastResolver/*.sendBroadcast。

可以接受感兴趣的广播。

4.3 资源管理框架:松耦合的资源配置

参考:http://www.cnblogs.com/mfryf/archive/2013/05/21/3090726.html

http://segmentfault.com/a/1190000002924501

4.3.1目标:解耦Model和View,模拟HTML。由HTML、CSS提供前端界面,由JS组织逻辑,后台提供Model。

4.3.2原理:使用XML处理前端,使用Activity作为组织逻辑,由Service提供Model。

4.3.3方法:

4.3.3.1  组织结构:

assets:不编译,直接使用。

Res:编译为R.java

-|Layout:布局

--|Window:绘制窗口

---|Control:具体的组件

---|…

-|menu:菜单

-|value:各种值(类似枚举)

4.3.3.2  Res使用方法:R.java

View直接使用Layout的文件名称

setContentView(R.layout.activity_main);

编译为R.java类,从其中直接读取ID等,可以取得相应的资源。

增加资源:@+资源类型/名称。

定义id

android:id="@+id/button"

读取id代表的资源:(资源类型)findViewById(R.id.名称)。

使用id获取资源

Button  button = (Button)findViewById(R.id.button);

在XML中引用资源:@【包名:】类型/id

使用系统资源:android.R。xml中使用@android:类型/id

参考:http://www.cnblogs.com/greatverve/archive/2011/12/27/Android-xml.html

http://blog.csdn.net/ocean20/article/details/44198453

http://blog.csdn.net/leichelle/article/details/7949484

4.3.3.3  Assets使用方法:AssetManager

AssetManager am=getAssets();   

InputStream is =assset.open("filename"); 

4.4 GUI模型:底层由JVM调用OS的GUI实现,JVM的基本绘图单元为Drawable,Drawable+事件循环构成基本交互单元View,View+java逻辑构成基本交互页面。

参考:http://www.cnblogs.com/warioland/archive/2011/10/26/2224845.html

http://zhchzh1000.iteye.com/blog/747620

5 方法:前端视图Activity

参见:Android开发-前端视图Activity.docx

6 方法:IDE AndroidStudio

6.1 解决adb notresponding if youd like to retry...错误

参考:http://vcsos.com/Article/pageSource/140816/20140816162242.shtml

http://blog.csdn.net/afterwinter/article/details/44243891

原因:ADB使用TCP 5037端口,如果被占用,则无法启动。

解决方法:查找TCP 5037占用的进程,关闭此进程。

netstat -aon|findstr "5037"

6.2 查看调试信息输出:Log.v(),Log.d(),Log.i(),Log.w(),Log.e()

参考:http://jojol-zhou.iteye.com/blog/696567

可以使用Log类的静态函数(verbose,debug,info,warning,error对应的函数)输出调试信息(会调用println()输出),也可以直接调用System.out.println()输出(可以使用info过滤)。

Verbose:所有log信息。

Debug,Info,Warning,Error级别逐渐提高。

示例

public  void click3(View source){
   ((TextView)findViewById(R.id.textView)).setText("Button3.clicked!");
    System.out.println("btn3 click.");
    Log.v("btn3","verbose");
    Log.d("btn3","debug");
    Log.i("btn3","info");
    Log.w("btn3","warning");
    Log.e("btn3","error");

}

6.3 设置APILevel

参考:

http://stackoverflow.com/questions/21449947/how-do-i-set-the-minimum-api-level-for-projects-in-android-studio

File-》ProjectStructure-》App-》Flavor-》Mini SDK Version。

设置后等待工程更新。

6.4 颜色ARGB:默认使用ARGB的十六进制表示,也可以指定RGB或HSB。

7 方法:后端Model-Service

参见:Android开发-后端Model_Service.docx

8 方法:前后端控制器intent

参见:Android开发-前后端控制器intent.docx

9 方法:进程间通信ContentProvider/ContentResolver

9.1 目标:不同应用之间通信。

9.2 原理:Android作为系统服务器,通过content协议提供类似Web服务,通过指定的uri进行通信。

9.3 流程:创建服务ContentProvider类,指定uri,使用ContentResolver调用服务。

9.3.1创建服务ContentProvider类

 

9.3.2指定uri

 

9.3.3使用ContentResolver调用服务。

 

9.4 方法:

10    方法:广播-订阅消息BroadcastResolver/*.sendBroadcast

10.1 目标:系统级监听器,监听符合条件的系统级广播。

10.2 原理:Android作为系统服务器,发布方应用通过Broadcast广播发布消息,接收方配置过滤消息的IntentFilter拦截需要的消息和处理类(使用BroadcastReceiver处理消息)。

10.3 流程:设置广播消息intent,发布广播;配置过滤器和处理器,创建BroadcastReceiver处理消息。

 

11    方法:3D图形

 

12    方法:GPS

 

13    方法:GoogleMap

 

 

0 0