有没有人分享一下修改launcher的历程

 我来答
福喜900
推荐于2016-10-30 · TA获得超过6.1万个赞
知道大有可为答主
回答量:1.1万
采纳率:0%
帮助的人:9910万
展开全部
我自己总结的,ubuntu和windows下几种不同的修改Launcher的方法:

总共有三大类:
#################
第一类,改签名:
#################
前面几个步骤ubuntu和windows通用:
=====================================================================================================
1 eclipse中新建android project,选择create project from existing source,去android源码目录下的packages/apps下找到相应的文件夹。(直接修改的是源码,所以需要先打包备份一下)然后选择build target之后finish,可能会等待一段时间。

2 导入完成后,src全是错误,由于在Android源码中,很多方法、成员、类、包都被打上@hide标签,这些成员在SDK中没有公开,以至于在编译Launcher源码时最常遇到的类android.view.View的成员mScrollX无法访问。
。以Launcher2为例,我们用到的有:(生成的包的路径为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->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工程以及没有错误了,也可以编译了。(其他的模块可能需要别的jar包,都在out/target/common/obj/JAVA_LIBRARIES下能找到).
=====================================================================================================

然后:
===================================================================================================
windows环境下:工程现在是不能直接运行的,因为eclipse默认的debug签名跟模拟器中的系统签名不相符合。因此,因此,需要手动签名。

3 用eclipse导出没有签名的版本,右键工程,android tools->export unsigned application package,得到未签名的apk包。

4 在build\target\product\security下都是一些公钥和密钥,system版本的公钥和密钥是platform.pk8和platform.x509.pem两个文件,shared版本的公钥和密钥是shared.pk8和shared.x509.pem两个文件。模块应用是什么版本的可以查看AndroidManifest.xml文件,android:sharedUserId="android.uid.system" 表示是system版android:sharedUserId="android.uid.shared"是shared版。除了公钥密钥之外,还需要签名的包即signapk.jar,它在out/host/linux-x86/framework下。

5 将这些工具准备好后,就能打出签名包了。比如我的为签名apk是Launcher.apk并且是shared版本。因此java -jar signapk.jar share.x509.pem shared.pk8 Launcher.apk Launcher-signed.apk(system版本就用platform.pk8和platform.x509.pem相应的替换一下)

6 得到了签名包之后,adb install -r Lancher-signed.apk就行了,直接替换掉原来的Launcher。
=====================================================================================================
ubuntu环境下:利用android源码提供的工具自动签名
3 编译源码

4 gedit .bashrc 最后面添加
export PATH=$PATH:/home/xxx/android/out/host/linux-x86/bin
export ANDROID_PRODUCT_OUT=/home/xxx/android/out/target/product/generic
其中的/home/xxx/android是源码目录

5 然后启动模拟器,命令为emulator

6 在eclipse中修改好源码模块比如Launcher2之后,将工程放到android源码目录下的packages/apps下,删除掉自动生成的一些文件,比如bin,assets,gen等等。跟其他模块文件保持一致。

7 android源码目录下执行 . build/envsetup.sh 这个时候多出mm,mmm等命令,进入修改过后的那个模块目录下,比如packages/apps/Launcher2/下,执行mm,会自动生成已经签名过的apk文件,放在out/target/product/generic/system/app下。

8直接adb install -r out/target/product/generic/system/app/Launcher2.apk即可。

=====================================================================================================
注意:以上的签名跟源码相关,如果源码只是generic的也就是模拟器版,那么编译出来的也只能在模拟器上跑,若要在真机上跑,则需要真机的签名库,可惜没有- -,所以需要:

##################
第二类,改包名。
##################

照常理说,应该很简单,直接在src下的包上F2,然后修改。但是我的机器这个eclipse很奇怪,总有各种问题,现在总结下:
1.导入工程,备份一下AndroidManifest.xml,原因下面有。F2修改包名,修改的时候下面四个选项都选上。

2.修改AndroidManifest.xml
将备份的AndroidManifest.xml换回来,然后ctrl+f,替换全部的原来包名为你现在的,比如之前是com.android.launcher2,现在换成com.pqrs.launcherEx。然后将android:sharedUserId="XXX"这句话删掉。(这么做的原因是,在第一步中可能已经自动的替换了一些这个xml文件的东西,但是我这eclipse乱七八糟的,缺字或者其他什么的,此时文件已经损坏了。所以第一步之前,需要备份一下AndroidManifest.xml,在这个步骤中替换回来,然后ctrl+f进行替换。)

3.保存后会有提示,说这个文件变化了,是否作出其他变更,点击yes。然后res下可能会有一些错误,打开那些xml文件,一般都是有些资源引用还是之前的com.android.launcher2,相应的都该成com.pqrs.launcherEx.
比如<favorites xmlns:launcher="http://schemas.android.com/apk/res/com.android.launcher2">改为<favorites xmlns:launcher="http://schemas.android.com/apk/res/com.pqrs.launcherEx">

4.由于AndroidManifest.xml中的包名改了,gen目录下的自动生成文件也会跟着变化,但是src下的java文件引用的R文件路径还没便过来,还需要更正过来。方法:包名上ctrl+h,选择file search,在Containing text下输入之前的import语句,比如是import com.android.launcher2.R;在File name patterns:中填入*.java(表示搜索java文件)scope下选择Selected resources,然后点击Replace进行全局替换。

5.如果都顺利的话,现在这就是一个新的工程了,直接在eclipse中修改运行即可,而且不限操作系统。

====================================================================================================

#############################################
第三类,网上流传的,最传统的方法,只限于ubuntu下。
##############################################

1、建立基本的Android开发环境
请参考官方文档或<<Android模拟器在Ubuntu8.10的安装>>

2、编译Android源码
Android源码根目录下通过make进行编译,请注意一些配置,具体可参考<<android源码的编译>>

3、把eclipse工程配置文件复制到Android源码根目录下
cp development/ide/eclipse/.classpath ./
chmod u+w .classpath # Make the copy writable
4、修改eclipse程序的配置
1)、增大eclipse内存设置
把eclipse.ini(在eclipse软件的安装目录下)的3个值改为下面的值:
-Xms128m
-Xmx512m
-XX:MaxPermSize=256m
2)、把Android-formatting.xml和android.importorder导入eclipse(可选)
Android-formatting.xml、.classpath和android.importorder都放在development/ide/eclipse/下
Android-formatting.xml用来配置eclipse编辑器的代码风格;android.importorder用来配置eclipse的import的顺序和结构。
在window->preferences->java->Code style->Formatter中导入Android-formatting.xml
在window->preferences->java->Code style->Organize Imports中导入Android.importorder
3)、安装anyedit插件(可选)
http://andrei.gmxhome.de/anyedit/下载并导入eclipse中

5、把Android源码作为一个工程导入eclipse
导入前先检查.classpath里的文件在Android源码中是否有相应的文件(文件夹),否则也会破坏android源码(一般是多添加文件/文件夹),.classpath里多余的路径可删除
新建Java Project(不是Android project,否则会破坏android源码),www.linuxidc.com选择从已存在的工程导入,工程名任意,完成。
导入时,eclipse要build工程,比较慢。导完后,一般都没有错误。
这里也就回答了第4个问题

6、eclipse上调试Android里的程序。
为了不让其它版本的Android工具和android文件系统影响下面的编译和调试,需要从环境变量中去除android工具和android文件系统的路径:
vim ~/.bashrc
看看有没有在PATH变量中加入Android工具和android文件系统的路径,如果加有,则注释它。通过下面的方法,我们是不需要在.bashrc中添加android工具和android文件系统的路径的
执行:
cd Android源码目录
. build/envsetup.sh #设了环境变量之后,会多出mmm等命令,可以通过输入help来查看
lunch 1 # 把emulator等工具和ramdisk.img等文件的路径对应起来,就可以直接调用emulator等工具,也解决了第3个问题
emulator &
ddms &
注意,先启动ddms,再启动eclipse,这样eclipse中就不会说端口冲突
然后在eclipse中配置调试类型和端口:
在Run->Debug Configurations->Remote java application上双击,然后,”Host:”设为localhost,”Port:”设为8800,”Connection Type”为Standard(Socket Attach)
然后“Apply”
注意,上面设置的端口要与DDMS中设置的端口一致,ADT插件使用了8700端口,因此上面设置的端口是8800。如果出现连不到VM的错误时,请注意,要先在DDMS中选中某一进程(对应某一应用程序),才能在eclipse执行 Debug。
在eclipse调试时,可以设断点、单步调试。估计google团队也是这样开发、调试Android应用程序的

7、编译Android源码
执行:
cd Android源码目录
. build/envsetup.sh
那 么就会多出mm/mmm等命令,mm/mmm用来编译模块(包括C、C++、JAVA程序)。我们也可以直接在 Android源码根目录下执行“make 模块名”来编译模块(模块名可以在.mk文件中找到)。模块编译后会在out/target/product/generic/system/app下生 成对应的.apk包。但是,用mm/mmm来编译生成的.apk并不会打包到system.img中,需要我们手动通过make snod把 system文件夹打包为system.img,不过这就得重新运行模拟器了,这也是很麻烦了。对于我们开发者来说,我们可以这样做:
1)把需要修改、调试的模块(比如AlarmClock.apk)从/system/app下移除,然后make snod,这样system.img就没有AlarmClock.apk了。
2)运行模拟器,就看不到AlarmClock了
3)修改AlarmClock源码并用mm/mmm来编译,在/system/app下生成AlarmClock.apk
4)通过adb把AlarmClock.apk安装到Android文件系统中,安装方法有两个:
A、通过adb install xxx/AlarmClock.apk
B、通过adb push xxx/AlarmClock.apk /data/app
两 种方法都可以把 AlarmClock安装到/data/app下,Android会自动把它显示在主菜单中(只要AlarmClock.apk中有一Activity包 含android.intent.category.LAUNCHER属性),不过A方法在/data/app生成 com.android.alarmclock.apk,B方法则是 AlarmClock.apk。用A方法时,如果原来已经安装了 AlarmClock,你还得先adb uninstall 它,而B方法则不用。推荐使用B方法。同样,卸载可以通过adb uninstall或adb shell rm xxx/xxx.apk来,也推荐用删除的方法来卸载
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式