一、添加系统API
在Android源码编译成功的基础上重新编译带自己API的android.jar需要进行以下几步操作。
1 添加自己源代码,在Android源码frameworks/base目录下新建一个文件夹保存代码,如gpio以包的形式命名添加的文件所在的路径,如gpio/java/inspur/GpioManager.java,添加的java文件开头定义的包即是编译成功的class文件所在的包。
2 修改makefile文件
2.1修改build/core/pathmap.mk文件
在FRAMEWORKS_BASE_ SUBDIRS变量后添加gpio\,代码如下(makefile文件中的语句以Tab键空格开头)
FRAMEWORKS_BASE_SUBDIRS := \
$(addsuffix /java, \
core \
graphics \
location \
media \
opengl \
sax \
telephony \
wifi \
vpn \
keystore\
gpio \
)
2.2修改frameworks/base/Android.mk文件
在packages_to_document变量后添加自己源代码的包名称,如android/tv,结果如下(makefile文件中的语句以Tab键空格开头)
packages_to_document := \
android \
javax/microedition/khronos android/inspur
3 在ubuntu命令行终端使用如下命令进行编译:
make clean
make update-api
make PRODUCT-sdk-sdk
最后一行也可以用如下两个命令代替:
make –j4
make sdk
4编译结果
4.1android.jar文件所在的目录为
/out/target/common/obj/PACKAGING/android_jar_intermediates/android.jar并在/out/target/common/obj/JAVA_LIBRARIES/android_stubs_current_intermediates/src目录下重新以package形式组织所有生成到android.jar中的源代码。
4.2 SDK所在目录为
out/host/linux-x86/sdk/,生成的sdk文件目录和压缩包为:
android-sdk_eng.xxx_linux-x86
android-sdk_eng.xxx_linux-x86.zip(xxx为自己android源码所在的文件名)
二、添加自己的APK至android系统
1) 将在 Eclipse (当然也可以用记事本编写)中编写好的纯源代码(src+res+AndroidManifest.xml )拷到 Android 源代码文件夹下的 packages/apps 目录下自己建的文件夹下(如:TestGpioAPI)
2) 然后添加 Android.mk 文件
Android.mk 文件内容如下:
LOCAL_PATH:=$(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := eng
LOCAL_SRC_FILES := $(call all-java-files-under, src)
LOCAL_PACKAGE_NAME := TestGpioAPI #这个就是你以后生成的apk的名字
include $(BUILD_PACKAGE)
3) 然后在 android源码目录下在终端输入 make [project name]
本例为:make TestGpioAPI
log输出的最后为:
Install: out/target/product/generic/system/app/HelloWorld.apk
就是在上面这个目录下生成了 HelloWorld.apk 文件
4) 把 HelloWorld.apk 装入模拟器
A:可以采用adb push的方式
B:在源码目录下执行 make snod将apk打包进system.img
log输出如下:
Targetsystem fs image: out/target/product/generic/system.img
5) 然后启动模拟器
进到out/target/product/generic目录下,
exportPATH=$PATH:~/Android/out/host/linux-x86/bin
exportANDROID_PRODUCT_OUT=~/Android/out/target/product/generic
执行这两句,设置环境变量(具体要根据自己的源码目录修改)
之后:emulator -system system.img -data userdata.img-ramdisk ramdisk.img 就可以把自己编译生成的img文件用虚拟机运行了。