• 1. Android 开发工具及原理王洪浪 MSN:whlsjtu@hotmail.com
  • 2. 讲义目录Android Application 基本概念; Android SDK 介绍及安装; Android SDK 主要工具使用; 从Eclipse中使用Android SDK; 什么是Android NDK,为什么需要NDK? NDK提供的主要工具使用;
  • 3. Android Application 基本概念;Android APP 使用JAVA编写的,Android APP用SDK编译后将数据、资源和代码编译到一个Android程序包,一般以.apk作为结尾; SDK 开发阶段资源 (String,BMP,ICON,Audio)数据代码 (java class和C++ so)ManifestAndroid APP (APK 包)APP 发布
  • 4. Android Application 基本概念;Android APP 一般由一个或者多个component 组成,Application可以包含如下类型的component,目前我们暂时先只关注最常用的Activity,Activity类似于Windows上的Windows,是进行显示和处理用户交互的对象类型,右图是Activity的生命周期迁移图示:
  • 5. Android Application 基本概念;Android Manifest是每个Android APK都会附带的配置文件,是供系统获取APP信息的重要配置信息,一般地,在系统启动一个程序之前,需要从Manifest配置文件获得如下的信息: 标识程序运行需要的权限,比如联网,读取存储,读取联系人等; 标识运行时候需要的最小系统版本; 标识程序需要的硬件依赖,比如依赖Camare,BlueTooth,MultiTouch等等. 系统库依赖,比如依赖于 Google Maps library. 其他…
  • 6. Android SDK 介绍及安装;Android SDK无需安装,下载解压就可以使用,使用Android SDK可以有两种方法: Command line方式,直接在命令行使用SDK提供的工具创建工程,部署,编译和调试工程; 通过Eclipse的ADT插件来使用,可以利用Eclipse来进行工程创建,部署,编译,调试。 通过Eclipse或者通过command line两种方式生成的Android工程略有不同,主要是有不同的工程配置文件,其他都是相同的,两种方式各有优缺点,Eclipse开发调试更直观方便,command line方式编译和部署可以方便的集成进脚本,可以更加方便的自动化。
  • 7. Android SDK 主要工具使用;使用Command line来进行开发; 首先使用 android 命令 来创建一个新的android工程,命令如下: android.bat create project -n androidtest1 -p ./androidproj -a Myactivity -t 5 --package com.navinfo.nds -n 指定工程名字为 androidtest1; -p 指定了工程路径; -a 制定了默认的activity名称(相当于windows下主窗口的名称) -t 制定了target id,target id对应了不同的google API level(android系统版本) --package 指定了代码Java 包名称
  • 8. Android SDK 主要工具使用;创建工程成功后,创建了如下的目录及文件结构: /CYGWIN/HOME/WANGHL/ANDROIDPROJ │ AndroidManifest.xml 工程配置Manifest文件 │ ant.properties ant编译配置文件 │ build.xml ant编译配置文件 │ local.properties 本地工程配置文件,不能上传至version control; │ proguard.cfg 工程配置文件 │ project.properties 工程配置文件 │ ├─bin 生成的APP APK所在目录 ├─libs 其他lib,此目录下的文件都被自动打包进APK ├─res 资源子目录 │ ├─layout 画面布局文件(类似于VS2005下的Dialog布局资源) │ │ main.xml │ │ │ └─values 字符串资源表 │ strings.xml │ └─src Java源代码子目录 └─com └─navinfo └─nds Myactivity.java
  • 9. Android SDK 主要工具使用;创建工程完成后,开始使用Ant来编译工程,首先确保JAVA_HOME环境变量已经定义好,然后直接使用Ant Debug或者Ant Release来编译相应的版本; 按照之前我们创建的工程名为androidtest1的工程,切换当前目录到工程目录 运行ant debug后,在bin目录下生成对应的apk包文件; 对于调试和单步跟踪,在command line下是不能进行跟踪,一般地,利用eclipse adt插件,利用eclipse中的java debugger进行调试; 在调试的时候,利用DDMS工具可以查看Android设备输出的log,进行截屏,控制系统进程,查看系统资源使用等功能; 使用adb工具可以安装,卸载APK,传输拷贝文件到设备上;
  • 10. 从Eclipse中使用Android SDK ;在Eclipse中使用Android SDK比较简单,只需要在Eclipse上先在线或者本地安装ADT,在ADT中设置后SDK路径就可以开始使用,使用Eclipse创建一个Android工程后,可以看到如下的目录和文件结构; ./.classpath 相比于使用android工具创建的工程 ./.project .project .classpath是eclipse特有的工程文件;ß ./AndroidManifest.xml 与android工具生成的相同 ./assets 资源文件夹,与res一样,但不自动生成ID; ./bin 生成目标 ./gen 自动生成代码 ./proguard.cfg 与android工具生成的相同 ./project.properties 与android工具生成的相同 ./res 与android工具生成的相同 ./src 与android工具生成的相同
  • 11. 什么是Android NDK,为什么需要NDK ; NDK 的目标: 在Android1.5或者更高版本上,生成可以供JNI调用的ARM版本的so动态库; 将生成的so动态库拷贝到工程的libs目录,使得这些文件能够自动打包进最终的APK包; In later revisions of the NDK, we intend to provide tools that help debug your native code through a remote gdb connection and as much source/symbol information as possible; NDK提供了: 一个GCC交叉编译工具链(compilers, linkers, etc..) ,用来编译ARM CPU目标程序,支持Linux, OS X 和 Windows (with Cygwin); 一系列Android暴露的API 头文件及相应lib库文件,在后续系统版本中,这些接口头文件也将保持兼容; 一个Build 系统,使得用户可以通过比较少的配置来写一个Makefile文件来管理工程; NDK 不能做: NDK不适合编写程序整体框架,一般地,Android APP还是由Java编写,由NDK来开发一些性能关键点接口, 整个APP生命期管理,Events管理还是由JAVA来完成;
  • 12. NDK主要工具 ;NDK开发的目录结构: androidproject │ AndroidManifest.xml │ ant.properties │ build.xml │ local.properties │ proguard.cfg │ project.properties │ ├─bin ├─libs ├─jni │ ├─Android.mk NDK工程配置文件 │ └─Application.mk NDK编译配置文件 ├─res └─src
  • 13. NDK主要工具 ;一个Android.mk和Application.mk的例子: 更多请参照$NDK/Documentation.html Android.mk: PROJECT_COMMON_INCLUDE = # $(call my-dir)/../../../../release/navmgr $(call my-dir)/../../../../release/nicore $(CLEAR_VARS)TOP_LOCAL_PATH := $(call my-dir) #common library project include $(TOP_LOCAL_PATH)/cstl.mk include $(TOP_LOCAL_PATH)/com.mk
  • 14. NDK主要工具 ;com.mk: PROJECT_NAME := com LOCAL_PATH := $(call my-dir)/../../../$(PROJECT_NAME)/src include $(CLEAR_VARS) LOCAL_MODULE := $(PROJECT_NAME) LOCAL_C_INCLUDES := $(PROJECT_COMMON_INCLUDE) $(LOCAL_PATH)/../inc $(LOCAL_PATH)/../../cstl/inc LOCAL_CFLAGS := -DLINUX -DHAVE_USR_INCLUDE_MALLOC_H LOCAL_SRC_FILES := \ Com_Cache.c \ Com_DataRead.c \ Com_DataWrite.c \ Com_DetectSD.c \ Com_Event.c \ Com_File.c \ Com_Geometry.c \ Com_LangCode.c \ Com_Log.c \ Com_Memory.c \ Com_MsgQue.c \ Com_SHM.c \ Com_Thread.c \ Com_Time.c LOCAL_STATIC_LIBRARIES := cstl LOCAL_LDLIBS := -lm -llog include $(BUILD_SHARED_LIBRARY)