Android Linux开发准备

    技术2022-05-20  70

    一、环境搭建、配置,Virtualbox安装,ctags安装,常用命令的使用,log函数使用:     Android2.3源码已经获取 1、选择合适java虚拟机 列出当前java-vm所有版本,任何路径下输入命令,该命令无法联想: # eselect java-vm list 如果显示如下: Available Java Virtual Machines:   [1]   icedtea6-bin system-vm   [2]   sun-jdk-1.6      -----说明当前系统使用的java-vm版本是1.6 如果当前版本不是你所要的,可以通过以下命令设定系统当前要使用的java-vm版本,有1.5指到1.5,没有则指到1.6 # eselect java-vm set system 2 注释:数字2代表list命令显示的序号[2]//修改过 2、修改main.mk中的java版本 原因:jdk版本需要与android java版本一致,当前从公司服务器上下载的jdk版本为1.6,用命令emerge -s jdk可以查看到virtual/jdk下当前安装的版本,而android java版本默认为1.5,需要修改android java版本为1.6,修改方法: 在文件build/core/main.mk     1》# Check for the correct version of java java_version := $(shell java -version 2>&1 | head -n 1 | grep '[ "]1/.5[/. "$$]') 修改: 将数字5改成6     2》# Check for the correct version of javac javac_version := $(shell javac -version 2>&1 | head -n 1 | grep '[ "]1/.5[/. "$$]') 修改成:将数字5改成6 3、设置Android的环境变量     1》export ANDROID_JAVA_HOME=$JAVA_HOME(该修改只对本次生效,电脑重启后需要重新设置,否则编译报错     2》如果希望环境变量在电脑重启后仍然生效,需要将该环境变量设置直接添加到/etc/profile中,命令vi /etc/profile进入该文件,直接将export ANDROID_JAVA_HOME=$JAVA_HOME命令复制     原因:系统启动阶段startx会执行该文件 注:前提条件是先配置好JAVA环境变量(在etc/profile中增加如下内容)  export JAVA_HOME=/opt/sun-jdk-1.6.0.20  export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar  export PATH=$PATH:$JAVA_HOME/bin 4、完全编译整个工程 进入Android2.3源码工程根目录mydroid下输入 make  localhost mydroid # make 出现以下信息: PLATFORM_VERSION_CODENAME=REL PLATFORM_VERSION=2.2.1 TARGET_PRODUCT=generic TARGET_BUILD_VARIANT=eng TARGET_SIMULATOR= TARGET_BUILD_TYPE=release TARGET_BUILD_APPS= TARGET_ARCH=arm HOST_ARCH=x86 HOST_OS=linux HOST_BUILD_TYPE=release BUILD_ID=MASTER 编译成功会出现Install: out/target/product/generic/system/app/Mms.apk,这是相对路径 编译后生成的文件放在目录/work/mydroid/out/target/product下,编译成功后的目录默认为generic,运行在模拟器上,在generic目录下中生成的重要文件夹system、root、data,其对应的还有三个镜像文件system.img、ramdisk.img、userdata.img(这三个文件时Android模拟器运行关键文件,放在android-sdk-linux/plateforms/android-8/下面)。 清空编译命令 #make clean 清空后product下的generic整个目录将被清除 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                     列出已经启动的模拟器 9、安装virtualbox 目的:在virtualbox下安装windowsxp,因为有些软件只有windows版本,在Windows下编辑文档不易乱码。     1》首先需要VirtualBox-3.1.8-61349-Linux_x86.run(下载或直接从别人机器上拷贝)文件,并保存到/usr/portage/distfiles目录下,修改/etc/make.conf文件中的ACCEPT_KEYWORDS=“”,然后执行下面命令:./VirtualBox-3.1.8-61349-Linux_x86.run安装virtualbox,安装成功,会在Application->System tools中出现Sun xVM VirtualBox。     2》运行VirtualBox命令(注意大小写),第一次启动需要创建一个xp的镜像,在创建过程中,选择Use existing hard disk选项,使用已有的xp镜像文件WinXp.vdi(从其他机器上拷贝)来创建新镜像。 注:在WinXp中安装需要的软件,如果拷贝的镜像已经安装了相关的软件,就不需要再安装。     3》在winxp下访问gentoo文件 打开Sun VirtualBox->settings->shared folders 添加你要访问路径,如/work 启动winxp系统。进入系统后,建立文件夹映射关系:我的电脑->工具->映射网络驱动器->浏览,可以看到VirtualBox Shared Folders中已经共享的文件,选择路径,就建立了相关映射 二、常用命令 1、Linux系统命令,通过tab键联想 系统快捷键 Ctrl+Shift+T  新建terminal tab Ctrl+Shift+W  关闭Tab Ctrl+Shift+N  新建terminal Ctrl+Shift+Q  关闭terminal Ctrl+Page up/down  tab间切换 Alt+Tab     窗口间切换 eix         查找可用软件,[I]表示文件已经安装  emerge     安装软件 scp        网络拷贝命令 ifconfig    查看ip地址 cd         进入目录 cd ..       返回上一级目录 cd ~       返回root目录 ls         查看当前目录下的文件信息,可带相关参数 ps         查看详细信息 pwd       查看当前的绝对路径 rm         删除文件及目录 touch       改变文件的时间记录,如果文件不存在,则创建该文件 which      查找文件(不熟) grep       查找符合条件的字符串,可在文件或者目录下查找   grep XXX * -r 递归搜索当前目录,查找字符串XXX(正则表达式)             grep命令非常有用,grep -rn(递归查找并显示行号)  XXX(要查找的字符串) *(或./表示当前目录查找,可以指定其他目录,如root/*) find 目录名 -name 文件名    查找文件 ./                           表示当前路径 shift +Insert键             粘贴,linux常用命令 2 、VI编辑器常用命令 指令模式与输入模式通过esc键切换,在输入模式中画面左下方会出现“INSERT”的字样。 1》指令模式      /XXX   向下查找字符串   n 显示下一个      ?XXX   向上查找字符串      :set nu   显示行号      :set nonu 不显示行号      :number(具体的行数)   跳转到具体的行      :set mouse = a     显示鼠标      :set mouse =        不显示鼠标        x, X     在一行字当中,x 为向后删除一个字元 (相当于 [del] 按键), X 为向前删除一个字元(相当于 [backspace] 按键)        dd       删除光标所在的那一整行      ndd      n为数字。删除光标所在的向下 n行      yy       复制光标所在的那一行      nyy      n为数字。复制光标所在的向下 n行      p, P     为将已复制的内容粘贴在光标下一行上,P 则为粘贴在光标的上一行        u        还原前一个动作      [Ctrl]+r  重做上一个动作      [Ctrl]+O       [Shift]+#        .          小数点,意思是重复前一个动作 2》指令模式进入输入模式     * i, I → 插入:在目前的光标所在处插入输入的文字,已存在的文字会向后退; 其中, i 为『从目前光标所在处插入』, I 为『在目前所在行的第一个非空白字元处开始插入』     * a, A → a 为『从目前光标所在的下一个字元处开始插入』, A 为『从光标所在行的最后一个字元处开始插入』     * o, O → o 为『在目前光标所在的下一行处插入新的一行』, O 为『在目前光标所在处的上一行插入新的一行』     * r, R → r 为『取代光标所在的那一个字元』, R 为『一直取代光标所在的文字,直到按下 ESC 为止』     * Esc → 退出指令模式,回到输入模式中   3》末行指令模式   :q    退出vi :q!   强制退出vi :wq   保存后退出 :w    保存文件 :x    退出 4》 远程登录命令   方式一:直接执行命令 rdesktop 10.1.1.5 -g 100% -u USERNAME -p PASSWD  -d ARCHERMIND   方式二:创建一个脚本文件如mstsc.sh,放在home下,将该命令保存在mstsc.sh文件中,执行. /home/mstsc.sh即可 拷贝文件或者文件夹 scp filename target_path      例:scp X.txt 192.168.13.54:/work scp -r 目录名 target_path smb命令 三、Android  Log提供添加以上调试信息对应的方法    1》在Android中可以使用Log类,Log类在android.util 包中。Log 类提供了若干静态方法 : Log.v(String tag, String msg); //VERBOSE Log.d(String tag, String msg); //DEBUG Log.i(String tag, String msg); //INFO Log.w(String tag, String msg); //WARNING Log.e(String tag, String msg); //ERROR 分别对应 Verbose,Debug,Info,Warning,Error。Tag为调试信息标签名称,msg为添加的调试信息。tag是一个标识, 可以是任意字符串,通常可以使用类名+方法名, 主要是用来在查看日志时提供一个筛选条件。   2》logcat使用方法如下所示:   logcat [options] [filterspecs]   logcat的选项包括:   -s 设置过滤器,例如指定 '*:s'   -f <filename> 输出到文件,默认情况是标准输出。   -r [<kbytes>] Rotate log every kbytes. (16 if unspecified). Requires -f   -n <count> Sets max number of rotated logs to <count>, default 4   -v <format> 设置log的打印格式, <format> 是下面的一种:   brief process tag thread raw time threadtime long   -c 清除所有log并退出   -d 得到所有log并退出 (不阻塞)   -g 得到环形缓冲区的大小并退出   -b <buffer> 请求不同的环形缓冲区 ('main' (默认), 'radio', 'events')   -B 输出log到二进制中。   过滤器的格式是一个这样的串:   <tag>[:priority]   其中 <tag> 表示log的component, tag (或者使用 * 表示所有) , priority 如下所示:   V Verbose   D Debug   I Info   W Warn   E Error   F Fatal   S Silent  以上log的级别依次升高,DEBUG信息应当只存在于开发中,INFO, WARN,ERROR这三种log将出现在发布版本中。、 四、搭建Android2.3源码调试环境 1》建立模拟器、SDCard .  ./android create avd -t 11 -n AndroidAVD2.2   ./mksdcard –l mysdcard 1024M /work/mysdcard.img 2》带SDCard启动模拟器   ./emulator -avd AndroidAVD2.2 –sdcard /work/mysdcard.img &    3》进入DDMS   ./ddms & 注:查看File--Preferences/Debugger的Starting values for local post(如8600) 4》打开Eclipse,导入Android2.3源码   新建Java Project项目,选择(Create project from exiting source)将Android2.3存放的源码导入。右击Android2.3项目,选择“Debug As—Debug Configurations—Remote Java Application”新建,注意Port选择同第3》步的一致(如8600)  5》Push媒体文件到SDCard   ./adb push /work/test3gp.3gp(需要push的文件名)/mnt/sdcard  6》重启模拟器(同第2》步)  7》启动Gallery应用程序,可以实现媒体播放


    最新回复(0)