Android Linux开发准备(2)

5、模块编译
如果仅仅修改了某个模块内部,不需要全部编译整个工程。每个模块目录下存放一个
1》Android.mk文件
    一个Android.mk file用来向系统描述源代码的。具体来说:该文件是GNU Makefile的一小部分,会被编译系统解析一次或多次。你可以在每一个Android.mk file中定义一个或多个模块,你也可以在几个模块中使用同一个源代码文件,编译系统为你处理许多细节问题。例如,不需要在你的Android.mk中列出头文件和依赖文件。NDK编译系统将会为你自动处理这些问题。这也意味着在升级NDK后,你应该得到新的toolchain/platform支持,而且不需要改变你的Android.mk文件。
LOCAL_PATH:= $(call my-dir)
定义好LOCAL_PATH变量。它用于在开发树中查找源文件。宏函数由编译系统提供,用于返回当前路径(即包含Android,mk file文件的目录)。

include $(CLEAR_VARS)
CLEAR_VARS由编译系统提供,指定让GNU MAKEFILE为你清除许多LOCAL_XXX变量(例如LOCAL_MODULE,LOCAL_SRC_FILES,LOCAL_STATIC_LIBRARIES,等等),除了LOCAL_PATH。这是必须的,因为所有的编译控制文件都在同一个GNU MAKE执行环境中,所有的变量都是全局的。

LOCAL_MODULE_TAGS Android
通过LOCAL_MODULE_TAGS来决定哪些本地模块会被编译进系统,如果用户不指定LOCAL_MODULE_TAGS,默认值是user。此外用户可以通过buildspec.mk来指定需要编译进系统的模块。用户也可以通过-mm来编译指定模块,或者通过make clean-module_name来删除指定模块。为了在Android.mk文件标识每个组件,必须定义LOCAL_MODULE变量。这个名字必须要唯一的并且不能包含空格。

LOCAL_SRC_FILES := $(call all-java-files-under, src)
模块包含的源文件LOCAL_SRC_FILES,如果是java源码的话,app的所有源码,可以调用all-java-files-under得到。指明源代码的文件夹。

LOCAL_PACKAGE_NAME := 指明包名
LOCAL_SDK_VERSION := current指明android-sdk版本
LOCAL_MODULE      模块名
LOCAL_C_INCLUDES  模块包含的头文件

include最后一行表示生成的模块类型:静态库(LOCAL_STATIC_LIBRARIES)、动态库(BUILD_SHARED_LIBRARY)

2》模块编译有两种方式:
    2.1》首先执行该命令的前提条件是必须在工程目录(/work/mydroid)下输入 . ./build/envsetup.sh (开始的两点之间有一个空格,要不不能执行),然后进入该模块路径下输入 mm命令,这种方式只会生成新的模块链接库,system.img不会重新生成,因此还需要制作文件系统。
    2.2》在工程根目录下执行make LOCAL_MODULE,make指定的模块,这种方式会重新生成新的system.img。

6、使用adb
adb的全称为(Android Debug Bridge)是一种debug工具。通过tools下的命令可以直接访问虚拟器。首先需要下载android-sdk-linux包,可与mydroid工程文件放在同一级目录下/work/android-sdk-linux;然后进入到tools目录输入命令:android-sdk-linux/tools。
以下命令均不能联想,可用-help查看命令具体的帮助信息
1》帮助
   ./android -help
2》列出target命令
   ./android list target
3》查看可用的avd命令
  ./android list avd
4》创建新的avd
  ./android create avd -t 11(id号) -n AndroidAVD2.2(自命名)
   -t参数表示target版本id, -n参数表示新创建的avd名。该命令会提示输入相关参数,可输入默认值或需要的参数
5》创建新的sdcard
  ./mksdcard –l mysdcard(自命名) 1024M(大小) /work/mysdcard.img(存放位置)

7、启动模拟器
 1》 ./emulator -avd AndroidAVD2.2 &(这里 & 表示后台运行)
 2》 加载应用程序apk
  ./adb install XXX.apk
 3》 带SDCard启动模拟器
  ./emulator -avd AndroidAVD2.2 –sdcard /work/mysdcard.img &(这里 & 表示后台运行)

8、模拟器与本地文件的互相传输
  仍然是在tools目录下android-sdk-linux/tools
 1》进入模拟器shell
  ./adb shell
 2》退出模拟器shell
  exit
 3》在tools下新建文件
  touch xxx.txt  其他方式 vi xxx.txt,进入文件编辑状态 :wq保存后退出
 4》本地文件即tools下的文件如xxx.txt复制到模拟器,一般情况下该文件只能放在模拟器的data目录下
  ./adb push xxx.txt /data
   如果需要将本地文件写到模拟器中的其他目录,如system目录,该目录用来存放动态链接库,通常情况下该目录不允许写,需要获取文件系统权限
   ./adb remount
 5》将模拟器data下的文件复制到本地的当前目录
  ./adb pull /data/xxx.txt ./
  最后的./代表当前的tools目录
  6》常用命令(tools目录下输入./adb -help可以查看所有adb相关命令)
./adb install                     安装应用程序
./adb uninstall <软件名>           卸载应用程序
./adb uninstall -k <软件名>        卸载应用但是保存配置和缓存文件
./adb pull < remote> <local>     把文件从模拟机上复制到pc机上
./adb push < local>  <模拟器>     把文件从pc机上复制到模拟机上
./adb remount                     获取模拟器文件系统权限
./adb shell                       进入模拟器shell
exit                              退出模拟器shell
./adb logcat                      打开log开关
./adb devices                     列出已经启动的模拟器

linux

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/24391.html