A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 小鲁哥哥 于 2016-11-11 11:28 编辑

【济南中心】Android课程同步笔记day01:Android应用开发基础

Android简介
1. 什么是安卓
最初由安迪·鲁宾等人开发制作,最初开发这个系统的目的是创建一个数码相机的先进操作系统;后来发现市场需求不够大,加上智能手机市场快速成长,于是Android 被改造为一款面向智能手机的操作系统,2005 年由Google 收购注资,并组建开放手机联盟。2007年11月12日,Android Beta操作系统SDK 正式发布。
2. 安卓的进化史
2008 年9 月23 日Android 1.0 发布,代号Bender(发条机器人),Android 系统最早的版本。
2009 年5 月23 日Android 1.5 发布,代号Cupcake(纸杯蛋糕),支持蓝牙录像复制/粘贴功能
2009 年9 月15 日Android 1.6 发布,代号Donut(甜甜圈)该版本首次支持CDMA
网络。
2.1 Eclair(闪电泡芙)
2009 年10月26 日Android 2.0 发布,代号Eclair(松饼),是Android 发展历史上第二个重要的里程碑时刻(第一个是Android1.5)。
2010 年5 月20 日Android 2.2 发布,代号Froyo(冻酸奶)为Android 添加了很多企业级功能。
2.3 Gingerbread(姜饼)---支持NFC
3.0 Honeycomb(蜂巢)
2011 年10 月19 日Android 4.0 发布,代号Ice Cream Sandwich(冰激凌三明治)是Android 发展历史上最重大的一次升级。
2012 年6 月28 日Android 4.1 发布,代号Jelly Bean(果冻豆)是谷歌继蜂巢之后,一次全新的平板策略尝试。
2014 年10 月15 日Android 5.0 发布,代号Lollipop(棒棒糖),全新的UI 设计,全新的操作系统。
4.2 Jelly Bean (果冻豆)
2015年10 月6 日Android 6.0 发布,代号Marshmallow(棉花糖),这次的新版系统在UI 和交互上和Android 5.X 保持高度一致。
3.系统架构
1.Linux 内核     linux kernel
2.系统运行库 libraries+dalvik
3.应用程序框架 application  framework
4.应用程序层application
4.DVM和JVM
JVM: Java Virtual Machine   基于虚拟器的栈结构执行.class文件
DVM: Dalvik Virtual Machine   基于寄存器的虚拟机执行.dex格式文件
android程序编译完之后生成.class文件,然后,dex工具会把.class文件处理成.dex文件,然后把资源文件和.dex文件等打包成.apk文件。
dex工具会去除冗余信息,并把所有的.class文件整合到.dex文件中。减少了I/O操作,提高了类的查找速度
Dalvik是Google 公司自己设计用于Android 平台的Java 虚拟机。它执行的是已转换为.dex(即DalvikExecutable)格式的Java 应用程序的运行,.dex格式是专为Dalvik设计的一种压缩格式,适合内存和处理器速度有限的系统。
Dalvik经过优化,允许在有限的内存中同时运行多个虚拟机的实例,并且每一个Dalvik应用作为一个独立的Linux 进程执行。独立的进程可以防止在虚拟机崩溃的时候所有程序都被关闭。
5.ART模式 AndroidRuntime
优点: 在安装Apk文件的时候直接对程序进行代码读取编译为机器语言,免去Dalvik模式要时时转换代码,提高运行速度。
缺点: 安装文件时间会更长, 并且会消耗更大的存储空间。
开发工具
1. SDK目录
add-ons : 附加库
build-tools : 存放与编译相关的工具,
docs :  Api文档
extras : 扩展包,包括下向下兼容开发包以及Intel 硬件加速程序等;
platforms : 真正的SDK文件,ant 为ant 编译脚本,skins则是Android 模拟器的皮肤,templates 是工程创建的默认模板
platforms-tools : 保存通用的工具,比如adb、和aapt、aidl、dx 等文件。
sources : 系统源码
samples是Android SDK自带的默认示例工程
system-imagesAndroid 系统镜像文件;
tools:ddms用于启动Android 调试工具,draw9patch 则是绘制android平台的可缩放png图片的工具, emulator 是AndroidSDK 模拟器主程序,traceview作为android 平台上重要的调试工具。
2. DDMSDalvik Debug Monitor Service
调试某个进程
更新进程堆栈信息
下载进程堆栈数据到本地
调用垃圾回收器
更新线程
开启方法性能分析数据收集,
停止某个进程
抓取Android 目前的屏幕
查看当前界面视图树结构
Android程序入门
1. 应用程序目录
src :源代码存放目录
gen :自动生成的目录
assets :存放资源文件
bin :用来存放ADT编译时产生的临时文件
libs :       支持库目录,存放第三方jar包
res :资源目录,assets 目录下的资源文件不会在R.java 自动生成ID,
        res/drawable存放图片
        res/layout   存放xml界面布局
        res/values  存放应用使用到的类型
                      strings.xml 定义字符串和数值
                      colors.xml    定义颜色和颜色字串数值
                      dimens.xml  定义尺寸数据
                      styles.xml            定义样式
        res/anim             存放自定义动画
        res/xml         
        res/raw         存放应用的原始文件,这些数据不会被编译,直接加入到程序安装包里
AndroidManifest.xml 项目清单文件该文件用于配置四大组件、声明权限、配置应用版本等参数。
project.properties项目环境信息,一般是不需要修改此文件
proguard-project.txt 用于配置代码混淆参数。
2.打包过程

ADT 将Java 源文件编译成.class,然后调用dx 工具将所有的.class 抽取到一个叫classes.dex的文件中。调用aapt工具将Android 中所有的资源,包括res 和assets 资源以及清单文件一起打包成apk文件,然后在部署的时候给apk进行签名操作,最后通过ADB 工具将签名后的APK 部署到模拟器上。
相同签名的会覆盖安装,不同签名的需要先卸载之前的应用才能安装
3.ADB简介 Android Debug Bridge
1、adb devices 列出当前连接上所有设备
2、adb install xxx.apk将xxx.apk安装到模拟器上
3、adb uninstall 包名卸载应用
4、adb push <本地路径><远程路径>将本地文件上传到模拟器上
5、adb pull <远程路径><本地路径>将模拟器上文件下载到本地
6、adb kill-server 杀死adb进程
7、adb start-server 启动adb进程
8、adb shell 进入Linux shell 命令行
                     input text 将文字输入到模拟器上
                     chmod mode 文件名 更改权限
案例-电话拨号器
线性布局       LinearLayout 分为垂直vertical 和水平horizontal (默认)两个方向;
wrap_content包裹类型,控件内容有多大就尽量给分配多大的空间;
match_parent、fill_parent是填充父控件类型,后者已经被废弃,使用前者代替;
[Java] 纯文本查看 复制代码
public class MainActivity extends Activity {

        private EditText mEt_num;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
                // 找控件
                mEt_num = (EditText) findViewById(R.id.et_num);

        }

        public void tel(View v) {
                // 获取输入的文字
                String text = mEt_num.getText().toString().trim();
                // 创建意图对象
                Intent intent = new Intent();
                Uri uri = Uri.parse("tel:" + text);
                intent.setAction(Intent.ACTION_CALL); // 设置Action ,表示需要用意图对象做什么事情
                intent.setData(uri); // 设置数据,
                startActivity(intent);
        }
}
在AndroidManifest.xml 中添加权限权限。
<uses-permissionandroid:name="android.permission.CALL_PHONE"/>
案例-短信发送器
[Java] 纯文本查看 复制代码
public class MainActivity extends Activity {

        private EditText mEt_num;
        private EditText mEt_sms;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
                // 找控件
                mEt_num = (EditText) findViewById(R.id.et_num);
                mEt_sms = (EditText) findViewById(R.id.et_sms);
        }

        public void tel(View v) {
                // 获取输入的文字
                String num = mEt_num.getText().toString().trim();
                String sms = mEt_sms.getText().toString().trim();
                // 获取API提供的短信管理器
                SmsManager smsManager = SmsManager.getDefault();
                // 一条短信限制70个字符,160个字节长度超过一定的限制后需要切割成多条分批发送
                ArrayList<String> parts = smsManager.divideMessage(sms);
                // 发送短信
                // 第一个参数String目标手机电话号码,第二个参数String短信中心号码,使用sim卡提供的默认短信中心,建议设置为null,第三个参数ArrayList短信内容,第四个参ArrayList<PendingIntent>短信发送后如果发送成功了,那么回调该参数,通过延时意图和广播才能实现,第五个参数短信发送后如果被对方收到了,那么回调该参数。
                smsManager.sendMultipartTextMessage(num, null, parts, null, null);
        }
}
添加权限
<uses-permissionandroid:name="android.permission.SEND_SMS"/>

点击事件的四种实现方式
一、通过内部类
[Java] 纯文本查看 复制代码
button.setOnClickListener(new ButtonListener());

class ButtonListener implements OnClickListener {

                @Override
                public void onClick(View v) {

                }

        }
二、通过匿名内部类
[Java] 纯文本查看 复制代码
button.setOnClickListener(new OnClickListener() {

                        @Override
                        public void onClick(View v) {
                                // TODO Auto-generated method stub

                        }
                });
        }
三、通过给控件设置点击事件监听器,让当前Activity 实现OnClickListener接口
[Java] 纯文本查看 复制代码
button.setOnClickListener(this);
        // 实现onClick方法
        @Override
        public void onClick(View v) {
                switch (v.getId()) {
                case R.id.button:
                        
                        break;

                default:
                        break;
                }
        }
四、通过布局文件中控件的属性android:onClick="click"属性,在Activity里面写自定义方法名称要和onClick属性中的方法名一致
[Java] 纯文本查看 复制代码
public void click(View v) {
                
}
Android常用布局
相对布局RelativeLayout
线性布局LinearLayout
帧布局    FrameLayout
Android中的长度单位
px :pixels 的意思,是屏幕的物理像素点,与密度相关,密度大了,单位面积上的px会比较多。不推荐使用的单位。
dp(dip):设备无关像素一般情况下,在不同分辨率下都不会有缩放的感觉。在运行时,Android 系统会根据使用的屏幕的实际密度,透明地处理任何所需dp单位的缩放。推荐使用的单位。
sp:与刻度无关的单位,同dip/dp相似,会根据用户的字体大小偏好来缩放,主要用于设置字体的大小。
dp和px的区别
dip到px的转换公式: px =dip * (density / 160)



点评

楼主辛苦~  发表于 2017-7-11 16:45

5 个回复

正序浏览
多谢分享
回复 使用道具 举报
可以可以
回复 使用道具 举报
太好了,学习到了
回复 使用道具 举报
小鲁哥哥永远是这么给力!!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马