1.安卓系统架构
分4层结构
1. application:应用程序;用Java开发
2.application frame:应用程序框架;用Java和jni开发(Java native interface)
3. libraries +android runtime dvm : 函数库和虚拟机层 ; c/c++
4. linux kernel driver :linux内核驱动层; c
2.java和android虚拟机的不同
jvm :sum
dvm :google 版权问题。
jvm : java 虚拟机; 基于栈架构,栈是内存上的一个空间,执行指令操作需要向Cpu寻址后执行。 执行的是多个.class文件。
dvm : dalvik 虚拟机;基于寄存器架构;寄存器是Cpu的一个组成部分,可以直接执行指令操作,无需寻址。执行的是一个.dex文件。
3.android工程目录结构
.java文件调用组件 : R.drawable.icon .xml文件调用组件 : @/drawable/icon
1.src :代码目录
2.gen:自动生成的文件都在该目录,不要修改; R文件,对资源文件的一个引用索引
3.android 核心jar包和第三方jar包
4.assets : 资产目录,一般存放应用程序所使用 的一些工具,数据
5.libs
6.bin : 程序编译打包过程中产生的文件都在该目录
7.res: 资源目录
drawable:图片资源
layout: 布局
menu:菜单
values: dimens 长度资源 strings 字符串 style 样式资源
4..Android的打包过程
使用工具 javac dx.bat aapt 签名认证(jarsigner.exe)
.java---------->.class ---------->.dex(androidmanifest.xml,res ,assets)----------->.apk------------->finish apk-
adb.exe
------>devices
5.ADB指令练习
adb运行的端口是5037
adb: 建立android设备与电脑之间的链接
配置环境变量: C:\kaifa\adt-bundle-windows-x86_64_20140101\sdk\platform-tools
adb指令:
1.adb devices : 列出当前电脑所连接的android设备
2.adb push pc_filepath phone_filepath;将电脑端文件推送到手机端
3.adb pull phone_filepath pc_filepath;将手机端文件拉到电脑端
4.adb install [-r] apkfilepath ;安装应用到手机上 , -r 代表强制安装
5.adb uninstall packagename;卸载应用
6.adb kill-server 关闭adb服务链接
7.adb start-server 开启adb服务链接
8.netstat -oan 5037 对应的 Pid
9.adb shell :进入手机linux环境下
10. adb shell + logcat: 查看手机打印的日志信息
11. adb shell + ls -l : 查看手机目录结构
12.如果当前电脑链接多台android设备,要执行adb操作时需要指定操作的是哪台设备。 adb -s 设备序列号;
例如: adb -s emulator-5554 uninstall com.itheima.helloworld
6.应用代码--拨号器
publicclassMainActivityextendsActivity {
protectedvoidonCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 获得组件ID
finalEditTextphone_number=(EditText)findViewById(R.id.phone_number);
Button call_bt=(Button)findViewById(R.id.call_number);
//绑定监听事件使用匿名内部类进行实现接口
call_bt.setOnClickListener(newOnClickListener() {
@Override
publicvoidonClick(View v) {
//获取文本框内的内容,在内部类中使用外部类的成员时,成员必须是final
String number=phone_number.getText().toString().trim();
//判断内容不能为空
if(TextUtils.isEmpty(number))
{
//输出提示信息
Toast.makeText(MainActivity.this,"不能为空", 1).show();
return;
}
//拨打电话时需要创建一个意图对象
Intent in=newIntent().setAction(Intent.ACTION_CALL);
//注意冒号
in.setData(Uri.parse("tel:"+number));
//开启意图
startActivity(in);
}
});
}
}