一 Android平台结构,SDK目录结构,目录结构
android是一个linux内核的操作系统,常规编程语言是java,不过也推出了NDK,可以用c++来访问部分接口。这篇就略去环境搭建和hello world了。
1. 平台整体架构 + Applications: 应用程序层(自带的短信一些功能) + Application Framework: 应用程序框架层(主要关注点) + Library && Android Runtime: 底层功能库以及Android运行时 + Linux Kernel: Linux 内核
2. SDK目录:
3. 项目目录详解
- src: 专门存放我们编写的java源代码的包。 gen: 该目录不用我们开发人员维护,但又非常重要的目录。该目录用来存放由Android开发工具所生成的目录。该目录下的所有文件都不是我们创建的,而是由ADT自动生成的。该目录下的R.java文件非常重要。
- android 2.1: 存放Android自身的jar包。
- assets:该目录用来存放应用中用到的类似于视频文件、Mp3一些媒体文件。
res:res是resource的缩写,我们称该目录为资源目录。该目录可以存放一些图标、界面文件、应用到的文字信息。
res下有三个dawable文件夹: drawable-hdpi:用来存放高分辨率的图标; drawable-mdpi:用来存放中等分辨路的图标; drawable-ldpi:用来存放低分辨率的图标。 程序运行时可以根据手机分辨率的高低选取相应的目录下的图标。
res下还有一个layout文件夹,里面是ADT默认自动创建的main.xml文件,在mian.xml中存放的是布局文件,下面是mian.xml中的部分代码:
res下的values中的strings.xml用来定义字符串和数值,在Activity中使用getResources().getString(resourceId)或getResources().getText(resourceId)取得资源。strings.xml中的部分代码:
- AndroidManifest.xml:该文件是功能清单文件,该文件列出了应用中所使用的所有组件,如“activity”。
- proguard.cfg:混淆脚本文件。
- project.properties:该文件存放了项目的一些环境配置,根据需要可以手工改动。
可以将7改为3,4,7,8,10,11,12,13,14中的任意数值。
res下的文件在R.java中生成唯一id,layout和Activity也通过id关联
程序入口:
AndroidManifest.xml中intent-filter为上图配置的Activity即为程序入口.
三 签名apk
1.签名的意义 为了保证每个应用程序开发商合法ID,防止部分开放商可能通过使用相同的Package Name来混淆替换已经安装的程序,我们需要对我们发布的APK文件进行唯一签名,保证我们每次发布的版本的一致性(如自动更新不会因为版本不一致而无法安装)。
2.签名的步骤
创建key 创建key,需要用到keytool.exe (位于jdk1.6.0_24\jre\bin目录下),使用产生的key对apk签名用到的是jarsigner.exe (位于jdk1.6.0_24\bin目录下),把上两个软件所在的目录添加到环境变量path后,打开cmd输入
D:\>keytool -genkey -alias demo.keystore -keyalg RSA -validity 40000 -keystore demo.keystore
说明:-genkey 产生密钥 -alias demo.keystore 别名 demo.keystore -keyalg RSA 使用RSA算法对签名加密 -validity 40000 有效期限4000天 -keystore demo.keystore使用key对apk签名
D:\>jarsigner -verbose -keystore demo.keystore -signedjar demo_signed.apk demo.apk demo.keystore
说明:-verbose 输出签名的详细信息 -keystore demo.keystore 密钥库位置 -signedjar demor_signed.apk demo.apk demo.keystore 正式签名,三个参数中依次为签名后产生的文件demo_signed,要签名的文件demo.apk和密钥库demo.keystore. 注意事项:android工程的bin目录下的demo.apk默认是已经使用debug用户签名的,所以不能使用上述步骤对此文件再次签名。正确步骤应该是:在工程点击右键->Anroid Tools-Export Unsigned Application Package导出的apk采用上述步骤签名。
3.签名之后,用zipalign(压缩对齐)优化你的APK文件
未签名的apk不能使用,也不能优化.签名之后的apk使用zipalign.exe(android-sdk-windows\tools目录下)工具对其优化:D:\>zipalign -v 4 demo_signedfinal.apk
如上,zipalign能够使apk文件中未压缩的数据在4个字节边界上对齐(4个字节是一个性能很好的值),这样android系统就可以使用mmap()(请自行查阅这个函数的用途)函数读取文件,可以在读取资源上获得较高的性能.
- 在4个字节边界上对齐的意思就是,一般来说,是指编译器吧4个字节作为一个单位来进行读取的结果,这样的话,CPU能够对变量进行高效,快速的访问(较之前不对齐)。
- 对齐的根源:android系统中的Davlik虚拟机使用自己专有的格式DEX,DEX的结构是紧凑的,为了让运行时的性能更好,可以进一步用”对齐”进一步优化,但是大小一般会有所增加。