1. 编译内核 网上教程较多,官方的在这里http://source.android.com/source/building.html,如果遇到错误,基本上是把错误日志信息拷贝给google,然后找到自己要的结果,也可以找些参考文章,上面列举了常见的一些必须要按照的软件包,这里不一一列举。
2. 编译好源码后,会在相应的目录下生成img镜像和一些工具,网上大多数做法事导入环境变量的方式,在当前用户主目录下的.bashrc中添加以下配置
export ANDROID_PRODUCT_OUT=~/project/android/cupcake2/out/target/product/generic
ANDROID_PRODUCT_OUT_BIN=~/project/android/cupcake2/out/host/linux-x86/bin
export PATH=${PATH}:${ANDROID_PRODUCT_OUT_BIN};
同步下环境变量
source ~/.bashrc
然后运行时候要敲一串命令
emulator -image system.img -data userdata.img -ramdisk ramdisk.img
是不是麻烦啊 每次都要敲一长串的emulator xxx
Google提供了更省事的做法(http://source.android.com/source/using-eclipse.html ,包括导入源码)
首先把你在.bashrc中配置的那几行给注释了
在源码根目录执行 source build/envsetup.sh #(每次运行这个shell文件会给我们生成一些脚本,可以给我们做好多省事的事)
运行
lunch 1
make #(可以不用此步骤,因为之前编译过,如果不成功加上此步骤再来一次)
emulator #启动模拟器, 一切ok。省去了后面的参数
3. eclipse中编辑代码,现在看来步骤还是比较简单,但是我在网上看别人教我的方法,我实在看不懂。今早找到这个http://source.android.com/source/using-eclipse.html尝试下,成功了。
到源码根目录执行
cp development/ide/eclipse/.classpath . #注意最后面有个点(.),代表当前目录
chmod u+w .classpath #默认组内用户没有写的权限,省事加上写权限
(以上两部可以通过图形界面操作,包括改权限,在属性中可以改)
然后还需要改下eclipse配置,主要是配置下jvm的堆大小,如果给的内存太小的话导入时可能会导致内存溢出,即使不出现内存溢出错误,堆内存太小会频繁垃圾回收,回收会有短暂的暂停,会比较卡。
改为
-Xms128m
-Xmx512m
-XX:MaxPermSize=256m
现在通过eclipse创建一个java工程
File > New > Java Project
输入工程名
选择"Create project from existing source", 在browse中选择android源码根路径,注意是跟路径,因为.classpath被我们拷贝到了根目录 ;打开.classpath看看里面配置就能想明白为什么要这么操作了。
4. 编译系统应用每次都之作system.img实在是麻烦,可以在编译好源码后到out/target/product/generic/system/app下把你想要开发的源码删除,然后再回到源码根目录make snod,该命令是制作一个system.img(很慢,虚拟机上要分多钟),会把刚才那个目录下(system/app)的应用打包在system.img中。因为你打包时没有包含这个应用,所以你可以通过make把编译好的apk按照常规方式安装 adb install xx.apk,或者卸载. adb uninstall com.xx.xx..
5. 如果不按照上面的操作是很难删除系统应用的,我尝试过网上各种办法删除系统应用,但都未果。使用这个方法效率最高,虽然也可以每次编译后制作system.img,然后启动模拟器。但是结果可以想象,一天你能测试20次就算你系统牛了。