Android-android简介

来源:互联网 发布:帝国cms图片二级域名 编辑:程序博客网 时间:2024/06/02 05:30
一、android简介
  1. 3G介绍
    • 2G时代    2.5    GPRS    最大下载速度 30KB
      • wap类似2.5G或2.5G以下的网络   逐步被淘汰 
    • 3G时代     hsdpa      最大下载速度 7.2M  
      • 3G的基带带宽 
      • 中国联通   6M  6M/100  600K   
      • 中国移动   3.1M   ophone系统
      • 中国电信   固定网络非常多 3G -> wifi
    • 4G时代    最大下载速度35Mbps    还在探索中
  2. net互联网、3Gnet
  3. android : 是操作系统 + 部分应用层软件的集合.
  4. android火的原因:免费 开源。国内企业将android源码改进后作为自己自主研发的操作系统。
  5. android的版本历史
    • 1.5版
    • 1.6版
    • 2.1版
    • 2.2版:市面上绝大多企业主要针对2.2/2.3进行开发,2.2稳定,2.3有Bug
    • 2.3版:添加了sip通话的支持,在省电上下了功夫,并做成了黑色主题,但2.3模拟器有bug,不太稳定
    • 3.0版:主要是针对平板电脑,为平板和手机的整合做准备,有了对设备的判断开关
    • 4.0版:统一版,将电视、平板、手机整合,市面上还没有支持4.0版本
  6. 物联网:将各种设备连接到互联网上,操作更方便
  7. google给予开发商的约束:cts测试,目的是为了防止过多版本的android系统
二、android体系结构&虚拟机
  1. android体系分为4层:
    • 底层linux系统层
    • lib层(封装了c/c++代码库)
    • application framework层(纯java编写)
    • applcations层
  2. android虚拟机:Dalvik vm
  3. 普通虚拟机和android虚拟机的区别
    • 普通vm:  .java---> .class--->解析执行
    • 安卓vm:   .java---> .class--->.dex--->解析执行; 它对普通vm进行了优化,把java代码中的变量抽取后变成常量池

  4. jvm基于栈、dalvik vm基于寄存器
三、android开发环境搭建  ***
  1. jdk 1.5 以上版本,如果使用eclipse3.7 版本  jdk> 1.6
  2. ADT (android development tools ): android 开发工具 ,现使用较稳定的adt15.0版本
  3. 环境搭建步骤:
    1. 给eclipse添加adt插件:help选项--->Install New Software..--->add--->找到adt文件--->勾选全部Developer Tools--->如果没有联网一定要将最下方的条目contact all update...勾去掉--->下一步....--->重启eclipse
    2. 下载SDK:
      • 使用工具自动更新:可能出现的问题
        • SDK装不上,  默认https加密下载被政府干掉或被防火墙隔离,解决方法:SDK Manager的tools选项的option选项,将https-改->http下载
        • 缺点:效率慢,耗时
      • 手动下载:下载的原理是解析一个xml文件
        • 地址:http://dl-ssl.google.com/android/repository/repository-5.xml 包含所有下载内容
        • http://dl-ssl.google.com/android/repository/ android-2.3.1_r02-linux.zip (2.3版是xml文件的一部分),然后将下载后的文件放到SDK中的temp中
    3. 安装SDK:window-->Preference-->android-->SDK location..
    4. 配置模拟器:点小手机配置
      • android 2.2 是google api的子集 ,如果要使用 google 地图 /google 纵横 需要配置google api level 8
      • VGA  640*480  像素 
        • HVGA   half vga   480*320  使用较多
        • qvga   1/4 vga    320*240

        • WVGA   800* 480  使用较多
        • FWVGA  854 * 480
四、ddms的图形化操作
  1. ddms:Dalvik  debug  manager system, Dalvik虚拟器调试系统
  2. System.out.println打印到的是LogCat,而不是控制台
  3. 模拟器和虚拟机的区别?
  4. DDMS的视图
    • 左上(Drivers视图)
    • 左中(Emulator Control视图)、左下(LogCat视图)
    • 右上(File  Explorer视图)
五、adb的常用操作:命令行操作
  1. SDK目录结构 windows
    • samples目录:示例目录
    • docs目录(最权威的文档目录)
    • extras目录:第三方
    • platfroms目录:列出SDK所有支持安卓的源文件
      • android 很多版本映射关系 
      • 1.5~4.0 
      • 对应数字
      • 1.5   -api 3(ADT)
      • 1.6        4
      • 2.1        7
      • 2.2        8
      • 2.3        9
      • 2.4        10
      • 4.0        14
      • 4.0.3      15
  2. adb.exe:android debug bridge  android的调试桥
    1. 配置环境变量,方便使用
    2. adb的操作
      • 导入/出文件:adb push/pull [源文件] [目标文件]
        • adb push  haha1.txt   /mnt/sdcard/haha1.txt
      • 调试桥不稳定时可杀掉服务再重启:adb kill-server  |  adb  start-server
      • 应用程序的安装和卸载: adb install  [],只能安装和卸载apk文件
        • 安装:adb  install  demo.apk
        • 卸载:adb  uninstall  com.example.android.mnt,卸载指定唯一标识的报名卡
    3. 莫名其妙的问题:adb版本不兼容、真机应用的adb和eclipse的adb冲突
    4. adb其他命令
      • adb version 查看adb的版本
      • adb devices 查看当前所有连接上来的设备信息 
      • adb shell 来到模拟器或者是真机的控制台 hou
        • ls 查看目录信息 
        • ps 查看当前运行进程信息
        • kill pid 杀死某个进程 
      • ctrl+F11 横竖屏切换  

六、android_helloworld
  1. android的目录文件
    • project.properties:指定开发使用的android.jar版本
    • default.properties:adt和sdk版本过低时的文件,功能和project.properties类似
    • proguard.cfg:程序发布时的混淆,防止别人反编译
  2. AndroidManifest.xml 非常重要,系统的清单文件,相当于windows操作系统的注册表
    • <manifest/>
    • <uses-sdk  android:minSdkVersion="9"/>  意思是android2.3 以下的版本不可以安装这个应用程序 
    • <activity  android:icon="@drawable/app"  />代表应用程序的界面
      • android:name="@string/name":应用程序的名称
      • android:icon="@drawable/app":应用程序的图标
  3. 应用程序的资源文件:res文件
    • values目录
    • layout目录:编写应用程序对应的布局
  4. gen包下的R.java类:有三个内部类,类变量存放的都是资源的引用,对资源文件的修改都会造成R类的改变,变的只是增加或删除了引用
    • 内部类1 drawable:
    • 内部类2  layout:
    • 内部类3  string:
  5. DemoActivity:重要的文件
七、使用apidemo&导入代码
  1. apidemo示例代码:把android所有sdk提供的api使用方法都以示例展示出来
  2. 导入apidemo:create project from existing source
    • apidemo可能会存在,先将原有apis删除:adb uninstall  com.example.android.apis
  3. ctrl+H 搜索整个工程目录  选择file 搜索
八、案例--电话拨号
  1. layout的main.xml 配布局
    • android:lines="1":指示只能输入一行
    • android:id="@+id/aa_number",添加该元素的id,便于取值/响应操作
    • android:numeric="integer", 配置此EditText的文本只能是数字
    • android:hint="@string/hint" ,文本框的提示信息
  2. values的string.xml :配全局变量的值
  3. R.java :对以上两位的操作自动生成引用
  4. MainActivity.java:调用页面布局,并设置页面元素(button)的事件并响应事件
    1. 响应事件步骤
    • this.findViewById(R.idaa_number );指示在当前R.layout.main中查找id为 aa_number的引用,在根据引用返回对应的主键(例 Button对象)

    • Button的button.setOnClickListener( OnClickListener 接口);方法
    • View对象:被点击的时候调用的回调方法
    • Log对象:Log.i();/Log.e() ;/Log.d() ;/Log.v() ;/Log.w()
    • Intent对象:意图,代表一个要执行的动作意图  Intent  intent = new Intent();
      • intent.setAction(Intent.ACTION_CALL);
      • intent.setData(Uri.parse("tel:"+number));
      • 设置权限<uses permission android:name="android.permission.CALL_PHONE"/> 权限就是用来保护用户隐私的 
      • startActivity (...)方法激活该意图:startActivity(intent);
  5. 响应点击事件的四种写法
    • 自定义myOnClickListener类实现 OnClickListener接口,重写onClick(View v)方法
    • 匿名内部类,重写 onClick(View v)方法
    • 在布局layout.xml中定义 按钮 的 android:onclick="deal";
      •  MainActivity类中实现 deal(View  v)方法
      • 要文本响应还需在layout中配置  android:clickable="true"
    • 直接让该类 MainActivity实现 OnClickListener接口(常用它);
      • button.setOnClickListener( this);
      • public void onClick(View v){
      •        switch(v.getId)){
      •              case R.id.aa_button:
      •                     ...
      •         }
      • }
九、断点调试&代码部署到真实手机
  1. 安装手机驱动
  2. 其他步骤和模拟器部署一致
  3. 断点调试
十、apk文件打包的过程
十一、案例--短信发送器
十二、常用的一些布局简介
LinearLayout  线性布局 
AbsoluteLayout 据对布局 
qq斗地主 854*480 apk 800*480 apk 
RelativeLayout  相对布局
FrameLayout  帧布局 类似div层 
tablelayout 表格布局 
十三、android界面大小显示的单位
    推荐使用dip,文字使用sp。



实现拨号和短信发送原理:凡是涉及收费和隐私的都需要在注册表中设置权限
拨号:在创建好android工程后。
  1. 界面:layout设置界面(并设置文本编辑和按钮控件的id)、设置好要显示的文字变量及各种属性
  2. java代码实现功能:两种方式
    • 第一种:让MainActivity类实现OnClickListener接口,重写OnClick(View  view)方法,在该方法中获取文本(按id获取)的值,并处理按钮的单击事件
      • public class MainActivity2 extends Activity implements OnClickListener {
      • private EditText numET;
      •     public void onCreate(Bundle savedInstanceState) {// Activity创建时执行
      •         super.onCreate(savedInstanceState);
      •         setContentView(R.layout.main);
      •         numET = (EditText)findViewById(R.id.numET);// 获取文本框, 由于其他方法中也用, 用成员变量引用
      •         Button callBT = (Button) findViewById(R.id.callBT);// 获取到按钮对象
      •         callBT.setOnClickListener(this); // 给按钮添加监听器
      •     }
      • public void onClick(View v) {// 定义事件处理方法
      • String num = numET.getText().toString();// 获取文本框中的文本
      • Intent intent = new Intent();// 创建意图对象
      • intent.setAction(Intent.ACTION_CALL);// 设置意图的动作(拨打电话)
      • intent.setData(Uri.parse("tel://" + num));// 设置意图的数据(电话号码)
      • startActivity(intent);// 通过意图启动Activity(拨打电话的界面)
      • }
      • }
    • 第二种:在main.xml中添加按钮的onclick="send"属性,并在 MainActivity类中定义一个send(View view)方法,处理按钮的事件
      • public class MainActivity3 extends Activity {
      • private EditText numET;
      •     public void onCreate(Bundle savedInstanceState) {// Activity创建时执行
      •         super.onCreate(savedInstanceState);
      •         setContentView(R.layout.main);
      •         numET = (EditText)findViewById(R.id.numET);// 获取文本框, 由于其他方法中也用, 用成员变量引用
      •     }
      •     public void call(View view) {
      •      String num = numET.getText().toString(); // 获取文本框中的文本
      • Intent intent = new Intent();// 创建意图对象
      • intent.setAction(Intent.ACTION_CALL);// 设置意图的动作(拨打电话)
      • intent.setData(Uri.parse("tel:" + num));// 设置意图的数据(电话号码)
      • startActivity(intent);// 通过意图启动Activity(拨打电话的界面)
      •     }
      • }
  3. 在注册表中设置权限<uses-permission android:name="android.permission.CALL_PHONE"/> 
短信发送:
public class MainActivity extends Activity {
        private EditText numET;
private EditText contentET;
public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        numET = (EditText) findViewById(R.id.numET);// 获取2个文本框
        contentET = (EditText) findViewById(R.id.contentET);
    }
    public void send(View view) {
     String num = numET.getText().toString().trim();// 获取电话号码和短信内容
     String content = contentET.getText().toString();
     try {
SmsManager manager = SmsManager.getDefault();// 获取短信管理器
ArrayList<String> list = manager.divideMessage(content);// 使用短信管理器把短信分段
if (list.size() == 0) {
Toast.makeText(getApplicationContext(), R.string.content_empty, Toast.LENGTH_SHORT).show();// 弹出通知
return;
}
for (String sms : list) {// 逐段发送
manager.sendTextMessage(num, null, sms, null, null);// 使用短信管理器发送指定内容到指定号码上
}
contentET.setText("");// 清空文本框
Toast.makeText(getApplicationContext(), R.string.success, Toast.LENGTH_SHORT).show();// 弹出通知
} catch (Exception e) {
e.printStackTrace();
if (num.length() == 0)
Toast.makeText(getApplicationContext(), R.string.insert_num, Toast.LENGTH_SHORT).show();// 弹出通知
}
    }
}