把安卓源码中的system app独立出来,像开发普通app那样开发

      个人建议首先按照android源代码的ide/eclipse中的格式化xml和import导入到你编译的eclipse中,如果你编译的android源代码是2.3以上的版本的,建议用JDK6以上,提醒各位的是new androidProject不是Java project.
     此时你导入想DeskClock、Camera等没有调用到hide标签的项目时,这些项目都不会报错,你可以直接进行相应的修改或研究,呵呵,如果相应直接在eclipse或手机上运行的话,可能会提示你数字签名不正确,这个你自己改下整个项目名重写个数字签名即可,还有更狠的就是不管是手机还是模拟器你直击拿到root权限后,把原来的app删除掉,然后再运行你编译的源代码。如果涉及到hide标签怎么办咧,例如setting、Launcher2等项目,请看下面如何操作:

下面以Launcher2为例,详细解说一下:

1.将Launcher2项目导入eclipse中。
这时候Launcher2工程已经导入到eclipse中了,不过这时候会有158个错误(呵呵,编译2.3.3的是有这么多,反正其他版本也应该是有100多个,差不了多少).

2.添加Launcher2使用的包文件。

由于在Android源码中,很多方法、成员、类、包都被打上@hide标签,这些成员在SDK中没有公开,以至于在编译Launcher源码时最常遇到的类android.view.View的成员mScrollX无法访问。因此首先需要下载Android的代码并且编译好,因为要用到一些编译完成的class.jar文件

这里我们用到的有:(生成的包的路径为out/target/common/obj/JAVA_LIBRARIES)
1)framework_intermediates/classes.jar :这个主要是android的框架类
2)android-common_intermediates/classes.jar :这个包含com.android.common.Search这个类
3)core_intermediates/classes.jar :这个包包含dalvik.system.VMRuntime这个类
这些都是需要导入到工程里面的包,这个可以通过配置工程的Build Path来加入,
右键工程名称然后选择Build Path->Configure Build Path...->Libraries->Add Library->User Library->User Libraries...->New...
然后将上面3个依赖的包一个个的加入进来,分别命名为android_framework,android_common,android_core.
将3个包加入进来后,然后还需要将它们放到android2.3.3这个包的前面,可以在Build Path配置中选择Order and Export
这时候就会发现Launcher2工程以及没有错误了,也可以编译了。

3.修改Launcher2包名称,在模拟器上运行更改后的Launcher2.

改掉原始包的名字,切记使用eclipse的重命名机制(在包名上按F2可修改),不仅是类的引用,还有很多xml文件内部的引用(如import com.android.launcher3.R;),只要重命名不错,这些都可以一次性搞定的。

 

New name填写你自己的包名,把下面四项全部勾选。点击“Preview”

特别注意:你的项目最好不要放在中文路径下,不然rename时会出错,我就是开始放在中文路径下出错弄了很久才发现错误!

4.AndroidManifest.xml文件里面,找到这句话删除掉。(android:sharedUserId="android.uid.shared")

这样就大功告成了,我是用2.3的launcher来做实验的,结果没问题,运行成功

时间: 2024-10-27 00:23:30

把安卓源码中的system app独立出来,像开发普通app那样开发的相关文章

android 源码中使用System.loadLibrary加载第三方库

问题描述 android 源码中使用System.loadLibrary加载第三方库 我在android源码中编译一个apk,使用了几个第三方库文件,下面是Android.mk文件内容: LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE_TAGS := debug optional eng LOCAL_SRC_FILES := $(call all-java-files-under, src) LOCAL_PACKAGE

安卓源码编译后 模拟器启动不起来

问题描述 安卓源码编译后 模拟器启动不起来 安卓源码中在libcore,以及frameworks , external目录下添加了一些log信息 编译后的system.img镜像, 模拟器运行不起来 log不断打印如下信息: D/AndroidRuntime( 855): >>>>>> AndroidRuntime START com.android.internal.os.ZygoteInit <<<<<< D/AndroidRun

关于android源码中的APP编译时引用隐藏的API出现的问题

今天在编译android源码中的计算器APP时发现,竟然无法使用系统隐藏的API,比如android.os.ServiceManager中的API,引用这个类时提示错误,记忆中在android源码中的APP是可以使用隐藏的API的,为什么这个不行? 百思不得其解,最后通过对比mk文件发现,在计算机的mk文件中多了一句:LOCAL_SDK_VERSION := current,顿时发现问题所在 注释掉这句之后,重新mmm编译通过.

《Android 源码设计模式解析与实战》——第2章,第2.7节Android源码中的单例模式

2.7 Android源码中的单例模式在Android系统中,我们经常会通过Context获取系统级别的服务,如WindowsManagerService.ActivityManagerService等,更常用的是一个LayoutInflater的类,这些服务会在合适的时候以单例的形式注册在系统中,在我们需要的时候就通过Context的getSystemService(String name)获取.我们以LayoutInflater为例来说明,平时我们使用LayoutInflater较为常见的地

Eclipse与Android源码中ProGuard工具的使用

由于工作需要,这两天和同事在研究android下面的ProGuard工具的使用,通过查看android官网对该工具的介绍以及网络上其它相关资料,再加上自己的亲手实践,算是有了一个基本了解.下面将自己的理解和认识简要的做个笔记,有异议或者不解的,可以直接留言. 什么是ProGuard工具? ProGuard是android提供的一个免费的工具,它能够移除工程中一些没用的代码,或者使用语义上隐晦的名称来重命名代码中的类.字段和函数等,达到压缩.优化和混淆代码的功能.具体来说,使用ProGuard工具

安卓源码的Music.apk, 让其显示歌词

问题描述 安卓源码的Music.apk, 让其显示歌词 我对着前辈的Log把Package/apps/Music的内容全部修改了,,可是还是没有效果的,,,,我在想是不是还有其他的文件要改的??? 球大神 指点 解决方案 同问,在Music源码中添加歌词同步显示功能,思路是什么?需要自己建立一个数据库吗还是直接加载信息到MediaPlayer的数据库中还是怎么弄? 解决方案二: 同问,在Music源码中添加歌词同步显示功能,思路是什么?需要自己建立一个数据库吗还是直接加载信息到MediaPlay

PHP实现html源码中回车换行输出

 在源码中输入换行但是不显示像br 之类的字符我们需要通过php地转义字符来实现了,下文就一起来看看吧.     知识扩充   转移序列 说明 n 换行 r 回车 t 水平制表符 [/td> 反斜线 $ 美元符号 " 双引号 [0-7]{1,3} 此正则表达式序列匹配一个用八进制符号表示的字符 x[0-9A-Fa-f]{1,2} 此正则表达式序列匹配一个用十六进制符号表示的字符   用双引号(")定义字符串,PHP 懂得更多特殊字符的转义序列: PHP默认页面编码为HTML,要使

hashmap-请教HashMap源码中的一些问题

问题描述 请教HashMap源码中的一些问题 final Entry getEntry(Object key) { // 获取哈希值 // HashMap将"key为null"的元素存储在table[0]位置,"key不为null"的则调用hash()计算哈希值 int hash = (key == null) ? 0 : hash(key.hashCode()); // 在"该hash值对应的链表"上查找"键值等于key"的

关于hadoop 2.6源码中ApplicationClientProtocol的问题

问题描述 关于hadoop 2.6源码中ApplicationClientProtocol的问题 请教大神一个问题 Hadoop 2.6中,Client端提交JOB到RM端,他们是通过ApplicationClientProtocol通信的. 在RM端有RMClientService.java作为服务端接收请求并相应,代码是rpc.getServer(ApplicationClientProtocol.class...),可以看出服务端对应的协议是ApplicationClientProtoco