1.android框架图
SGL:面向嵌入式设备终端的2D图形引擎
Webkit:提供浏览器引擎
FreeType:位图和矢量字体的绘制。
Dalvik虚拟机:与java虚拟机不同,经过优化后,它可以将class文件经过”dx”工具转换成.dex文件格式,
dex文件格式更紧凑,执行效率更高。每个android应用程序都运行在单独的虚拟机实例上。互不影响,
而且它可以高效的产生多个虚拟机实例。
2.Android NDK
android native development kit 简称Android NDK,可以允许你在Android应用程序上使用c/c++编写的组件。
好处:
- java编写的代码容易反编译,而c/c++编写的反编译比较难,所以可以达到保护代码的作用
- 可以更容易复用第三方的代码库,因为大多数的第三方代码库时c/c++编写的
- 执行速度更高。
- 便于移植,较容易运行在其他嵌入式设备中,如使用OpenGL ES 可以同时在Android和iOS设备上运行。
- 使用NDK方式:1.使用SDK提供的NativeActivity类。2,使用JNI来访问。
3.Android应用程序基础
应用程序运行时,系统会启动一个Linux进程,并为该应用程序分配一个Linux用户ID,应用程序
只在程序内部可见,其他程序无法访问,但是可以通过Content Provider将数据暴露给其他应
用程序。
一个应用程序,一个进程,一个虚拟机实例。
Zygote是一个虚拟机进程,同时也是一个虚拟机实例的孵化器。每当系统要执行一个
应用程序时,Zygote就会fork出一个子进程来执行该应用程序。Zygote进程是在系统启动时就
已经初始化产生了,它可以通过复制自身,快速提高一个新的虚拟机实例。对于只读的系统库,
所有的虚拟机实例和Zygote共享同一块内存区域。节省了内存开销。
4.APK文件的结构
应用程序apk文件是一种能与Zip文件格式兼容的文件。SDK提供了aapt工具,它可以将类文件
和资源文件打包成apk文件。打包过程:将class文件转换成dex文件,生成资源表,优化XML文件
使用appt命令方式:
1.先将”SDK文件夹/platform-tools”路径添加到Path环境下。
2.进入Androidproject的bin目录下:输入“appt list <Android应用程序名>.apk”即可
也可以右键Androidproject,选择Android tools下的export…即可生成apk文件。
在java文件中:对资源的引用,R.resources_type.resources_name 或android.R.resources_type.resources_name (系统自带的资源)。
在xml文件中:引用方式,@resources_type.resources_name或@android:resources_type.resources_name
5.Intent 使用
Action:执行的动作。如 Intent.ACTION_VIEW,android.content.Intent.ACTION_CALL
Data:操作的数据,通常是Uri类型,如 Uri uri=Uri.parse(“smsto:10086”);
Type: 指定Data的MIME类型,默认是“text/plain”
Component:由哪个组件(Activity或broadcast)处理该Intent。
Extras:额外的信息,通常以Bundle形式放入。
//intent的作用: //1.调用浏览器 Uri uri1=Uri.parse("http://www.baidu.com");//data数据 Intent intent1=new Intent(); intent1.setAction(Intent.ACTION_VIEW); intent1.setData(uri1); //2.电话呼叫功能 Uri uri2=Uri.parse("tel:10086"); Intent intent2=new Intent(android.content.Intent.ACTION_CALL,uri2); //3.发送短信 Uri uri3=Uri.parse("smsto:10086"); Intent intent3=new Intent(Intent.ACTION_SENDTO,uri3); intent3.putExtra("sms_body", "welcome to android world"); //4.发送电子邮件,自己可能有多个邮件客户端,所以用 //intent.createChooser()创建一个ACTION_CHOOSER的intent //1.收件人地址,发送邮件的动作 Uri uri4=Uri.parse("mailto:[email protected]"); Intent intent4=new Intent(Intent.ACTION_SEND,uri4); //2.自己的邮件客户端,和发送的内容 intent4.putExtra(Intent.EXTRA_EMAIL, "[email protected]"); intent4.putExtra(Intent.EXTRA_TEXT, "android mail"); //3.指定data数据的类型,默认值 intent4.setType("text/plain"); //createChooser启动intent startActivity(Intent.createChooser(intent4, "选择Email客户端"));