集成android源码中的 packages/apps 到eclipse 比如launcher2

来源:互联网 发布:js 时分比大小 编辑:程序博客网 时间:2024/06/05 14:43

1,自己编译android生成sdk,我选择的是gingerbread-2.3.3_r1。把eclipse指向自己编译的sdk--android2.3.3r1-sdk_eng.root_linux-x86

 

2, 首先把packages/apps下的程序拉出来。比如:Calculator,DeskClock,Launcher2,Music,Protips。

其他的改动太多,不推荐。

 

3,在eclipse新建android工程,源码选择有AndroidManifest.xml的文件夹,得到一个android工程比如Launcher2。为了和模拟器上自带的launcher2有所区别,更改launcher2的包名。把“com.android.launcher”,“com.android.launcher2” 改成“com.zyl.launcher, com.zyl.launcher2”。(zyl就是自己名字的缩写)

 

4,当然,现在会看到几百个错误。为什么会有很多的类和方法看不到,在sdk里被屏蔽掉了,launcher2 命令行编译就可以过。生成sdk时会扫描所有的类和方法,有public和protected就会公开,生成framewroks/api/current.xml文件,命令“make update-api”可以更新current.xml.

 

5,但是,在类和方法前的注释有@hide字样的,这个类或方法就会被屏蔽,不会输出到current.xml。这样sdk就没有这个类或方法了。

实际在out/target/common/obj/JAVA_LIBRARIES 有你需要的类和方法。有人把“framework_intermediates/classes.jar” 导入到工程中当成一个外部库(注意库的顺序,android.jar应该放在最后),其实就是覆盖了android.jar内同包同名的.class。但是因为“framework_intermediates/classes.jar”很大,eclipse很容易死机啊。

 

6,只有用最笨的方法,把“framework_intermediates/classes.jar”解压,只是把需要的.class导入工程。android-common_intermediates和别文件夹能也可能用到。

 

7,重启emulator可以看到两个“启动器”了。想要直接启动,

AndroidManifest.xml 内加上 <category android:name="android.intent.category.LAUNCHER" />

 

8,eclipse集成的Graphical Layout 对<include />支持的不好,应该直接显示出来的。不知道Google如何编译调试xml文件的,eclipse很不方便啊。