最近需要做一个android上面的calendar的项目。以前没有接触android相关的东西都要从头开始学习。
我尝试的方法
弄了两天终于在ubuntu上面把android平台开发环境弄好了,在模拟器上写了两个小程序,熟悉了一下环境,想把android自带的calendar程序拿来看看,结果发现模拟器上面没有calendar程序,找了一下发现android源代码是有这个AP的,就把calendar工程用eclipse打开想直接编译成APK看看长得什么样子。结果打开发现一堆的错误,仔细看了一下发现是一些java相关的库没有加入到android.jar。
好吧,自己动手,丰衣足食,参考了一下fix_android_sdk.py(http://code.google.com/p/android-scripting/source/browse/tools/fix_android_sdk.py?r=bd959f44d4b39cedfa156a361c3be033c2fc3433),写了一个函数自动编译calendar相关的java代码然后打包到adnroid.jar中去,把下面的代码保存成fix_android_sdk.py。然后运行
python fix_android_sdk.py "src_folder", "sdk_folder"
就可以把calendar相关的代码加入到android.jar中去了.
测试了一下,这种添加方法,并没有把需要的库添加到模拟器上去,所以在运行的时候如果需要操作android.provider.calendar就会出问题。
解决办法,就是把calendar需要的库直接打包到calendar.apk中去,方法如下。
1. 把calendar需要的库打包成jar,修改fix_android_sdk.py单独生成一个jar(不加入到android.jar中)
2.在calendar工程中新建一个叫libs的packages,把单独生成的jar,添加到libs下面。
上面两步后,calendar基本上不crash了,但是从logcat中可以看到calendar还是找不到provider.calendar,这个应该是在AndroidManifest.xml中没有声明,所以系统找不到,我尝试来两种方法解决这个问题。
1.程序build system.img,用mmm命令把calendarprovider添加system.img中,这种方法我尝试可行,calendar工作起来没有什么问题
2.按照编译calendar的方法编译calendarprovider。
查了一下资料正确的添加方法是
在make 后
执行
. bulid/envsetup.sh
mmm /packages/apps/Calendar/
把生成的system.img, 替换sdk目录/platfroms/android-AOSP/images/ 下的system.img
这样这样calendar就直接被打包system.img中去了。
这样做后calendarprovider并不会被添加到SDK中,如果要在eclipse中使用,需要做下面的步骤
拷贝/out/target/common/obj /JAVA_LIBRARIES/framework_intermediates/classes.jar到SDK目录
然后
- Right-Click your project to open properties
- Java Build Path->Add Library->User Library->User Libraries->New
- Made up a name & check the “System Library” option
- Select the library you created->Add JARs
- Make sure all JARs you need are added to the project, and click OK
附fix_android_sdk.py代码