安卓手机用了快一年了,买来就刷机,但开始啥都不懂,于是就百度,找到了机锋网上同学们的教程,一步步学会了。
然后跟随G大又转战安智网。从2.1官方修改版,到2.2橘子版,然后到最近的2.3姜饼版,刷过几十次机!大大小小的软件、游戏用过几百个。系统和软件也经常被自己修修改改……
------------------ 2.2 ROM -----------------
关于修改和美化,我做过的工作如下:
修改开机动画(★★★☆☆)
修改开机第二屏图片(★★★☆☆)
透明化状态栏(★★☆☆☆)
修改状态栏时间颜色(★★★★☆)
修改运营商名字(★★★☆☆)
优化GPS和CPU调频(★★★☆☆)
修改apk图标和名字(★★★★☆)
定制ROM(★★★☆☆)
用到的工具:
JDK
Linux
ArscEditor.zip(修改resources.arsc,修改apk名字时需要)
浪子汉化AndroidResEdit.zip(XML汉化,修改运营商名字)
签名工具.rar(Windows下给apk、ROM签名,编译和反编译)
软件签名工具.apk(手机端签名工具)
makebootlogo.zip(解压与打包img文件,修改开机图片)
smali.zip(解开classes.dex文件,修改运行商名字)
总结一些经验:
其他的不多说,只想说一下apk的修改和ROM的定制。
推荐直接在Linux或者Android手机上操作(不建议在Windows下用WINRAR拖来拖去):
(文件操作在RE文件管理器中进行)
1)把apk后缀改成zip,然后用RE文件管理器自带的压缩/解压zip文件的功能,全部提取zip文件的内容放到指定的文件夹内。替换掉里面的图标,一般在\res\drawable这个目录下,名称一般为icon.png;
2)把\META-INF目录下的RSA和SF文件删掉,保留MF文件(最好这么做,否则某些apk可能会签名失败);
3)如果还要改软件的名字,那就把resources.arsc文件拷贝到电脑上用工具ArscEditor.exe来修改即可;
4)替换和修改好后,打包成zip,然后改后缀为apk;
5)安装工具“软件签名工具.apk”,用它来给新的apk签名。然后就完工了。
6)如果是定制ROM,那么要看apk文件里面是否有lib文件夹,如果有,把里面的\lib\armeabi文件夹下的所有so文件拷贝到系统的system\lib目录下(最好是把这些so文件的修改权限为775,另外把system\app下的app文件改成644权限)。然后安装类似于apk的签名方法给新的ROM签名。
PS:如果在手机上失败,可能是“软件签名工具.apk”的问题,可以在Windows下用“签名工具.rar”,效果一样。
附一:Android权限知识
同Linux系统的权限,详见我的文章《Linux的文件系统》。
附二:手动命令行给apk签名
第一步
C:/Program Files/Java/jdk1.6.0_10/bin>keytool -genkey -alias wendy.keystore
-keyalg RSA -validity 20000 -keystore wendy.keystore
输入keystore密码:[密码不回显]
再次输入新密码:[密码不回显]
您的名字与姓氏是什么?
[Unknown]: wendy
您的组织单位名称是什么?
[Unknown]: home
您的组织名称是什么?
[Unknown]: home
您所在的城市或区域名称是什么?
[Unknown]: New York
您所在的州或省份名称是什么?
[Unknown]: New York
该单位的两字母国家代码是什么
[Unknown]: CN
CN=wendy, OU=home, O=home, L=New York, ST
=New York, C=CN 正确吗?
[否]: Y
输入<wendy.keystore>的主密码
(如果和 keystore 密码相同,按回车):
其中参数-validity为证书有效天数,这里我们写的大些20000天。密码位数建议使用20位。
接下来我们开始为apk文件签名了。
第二步
执行下面这句jarsigner -verbose -keystore wendy.keystore -signedjar wendy_signed.apk wendy.apk wendy.keystore 就可以生成签名的apk文件,这里输入文件wendy.apk,最终生成wendy_signed.apk为Android签名后的APK执行文件。下面提示输入的密码和keytool输入的一样就行了。
如果还没搞懂,看http://developer.android.com/guide/publishing/app-signing.html 一文有些帮助。
附上keytool参数以及jarsigner参数:
keytool用法:
-certreq [-v] [-protected]
[-alias <别名>] [-sigalg <sigalg>]
[-file <csr_file>] [-keypass <密钥库口令>]
[-keystore <密钥库>] [-storepass <存储库口令>]
[-storetype <存储类型>] [-providername <名称>]
[-providerclass <提供方类名称> [-providerarg <参数>]] ...
[-providerpath <路径列表>]
-changealias [-v] [-protected] -alias <别名> -destalias <目标别名>
[-keypass <密钥库口令>]
[-keystore <密钥库>] [-storepass <存储库口令>]
[-storetype <存储类型>] [-providername <名称>]
[-providerclass <提供方类名称> [-providerarg <参数>]] ...
[-providerpath <路径列表>]
-delete [-v] [-protected] -alias <别名>
[-keystore <密钥库>] [-storepass <存储库口令>]
[-storetype <存储类型>] [-providername <名称>]
[-providerclass <提供方类名称> [-providerarg <参数>]] ...
[-providerpath <路径列表>]
-exportcert [-v] [-rfc] [-protected]
[-alias <别名>] [-file <认证文件>]
[-keystore <密钥库>] [-storepass <存储库口令>]
[-storetype <存储类型>] [-providername <名称>]
[-providerclass <提供方类名称> [-providerarg <参数>]] ...
[-providerpath <路径列表>]
-genkeypair [-v] [-protected]
[-alias <别名>]
[-keyalg <keyalg>] [-keysize <密钥大小>]
[-sigalg <sigalg>] [-dname <dname>]
[-validity <valDays>] [-keypass <密钥库口令>]
[-keystore <密钥库>] [-storepass <存储库口令>]
[-storetype <存储类型>] [-providername <名称>]
[-providerclass <提供方类名称> [-providerarg <参数>]] ...
[-providerpath <路径列表>]
-genseckey [-v] [-protected]
[-alias <别名>] [-keypass <密钥库口令>]
[-keyalg <keyalg>] [-keysize <密钥大小>]
[-keystore <密钥库>] [-storepass <存储库口令>]
[-storetype <存储类型>] [-providername <名称>]
[-providerclass <提供方类名称> [-providerarg <参数>]] ...
[-providerpath <路径列表>]
-help
-importcert [-v] [-noprompt] [-trustcacerts] [-protected]
[-alias <别名>]
[-file <认证文件>] [-keypass <密钥库口令>]
[-keystore <密钥库>] [-storepass <存储库口令>]
[-storetype <存储类型>] [-providername <名称>]
[-providerclass <提供方类名称> [-providerarg <参数>]] ...
[-providerpath <路径列表>]
-importkeystore [-v]
[-srckeystore <源密钥库>] [-destkeystore <目标密钥库>]
[-srcstoretype <源存储类型>] [-deststoretype <目标存储类型>]
[-srcstorepass <源存储库口令>] [-deststorepass <目标存储库口令>]
[-srcprotected] [-destprotected]
[-srcprovidername <源提供方名称>]
[-destprovidername <目标提供方名称>]
[-srcalias <源别名> [-destalias <目标别名>]
[-srckeypass <源密钥库口令>] [-destkeypass <目标密钥库口令>]]
[-noprompt]
[-providerclass <提供方类名称> [-providerarg <参数>]] ...
[-providerpath <路径列表>]
-keypasswd [-v] [-alias <别名>]
[-keypass <旧密钥库口令>] [-new <新密钥库口令>]
[-keystore <密钥库>] [-storepass <存储库口令>]
[-storetype <存储类型>] [-providername <名称>]
[-providerclass <提供方类名称> [-providerarg <参数>]] ...
[-providerpath <路径列表>]
-list [-v | -rfc] [-protected]
[-alias <别名>]
[-keystore <密钥库>] [-storepass <存储库口令>]
[-storetype <存储类型>] [-providername <名称>]
[-providerclass <提供方类名称> [-providerarg <参数>]] ...
[-providerpath <路径列表>]
-printcert [-v] [-file <认证文件>]
-storepasswd [-v] [-new <新存储库口令>]
[-keystore <密钥库>] [-storepass <存储库口令>]
[-storetype <存储类型>] [-providername <名称>]
[-providerclass <提供方类名称> [-providerarg <参数>]] ...
[-providerpath <路径列表>]
jarsigner用法: [选项] jar 文件别名
jarsigner -verify [选项] jar 文件
[-keystore <url>] 密钥库位置
[-storepass <口令>] 用于密钥库完整性的口令
[-storetype <类型>] 密钥库类型
[-keypass <口令>] 专用密钥的口令(如果不同)
[-sigfile <文件>] .SF/.DSA 文件的名称
[-signedjar <文件>] 已签名的 JAR 文件的名称
[-digestalg <算法>] 摘要算法的名称
[-sigalg <算法>] 签名算法的名称
[-verify] 验证已签名的 JAR 文件
[-verbose] 签名/验证时输出详细信息
[-certs] 输出详细信息和验证时显示证书
[-tsa <url>] 时间戳机构的位置
[-tsacert <别名>] 时间戳机构的公共密钥证书
[-altsigner <类>] 替代的签名机制的类名
[-altsignerpath <路径列表>] 替代的签名机制的位置
[-internalsf] 在签名块内包含 .SF 文件
[-sectionsonly] 不计算整个清单的散列
[-protected] 密钥库已保护验证路径
[-providerName <名称>] 提供者名称
[-providerClass <类> 加密服务提供者的名称
[-providerArg <参数>]] ... 主类文件和构造函数参数
例如,在jarsigner命令中用上-sigfile参数就可以自定义密匙文件名了。
------------------------ 2.3 ROM -----------------------
2.3版本有很多东西和2.2的不同,本人花了1个星期的时间去修改2.3.7,具体做了以下工作:
【基于云飞扬的2.3.7最新编译公测版】借鉴了其他一些ROM
一:使其支持data\app
1.加入了check_data_app脚本(在ROM主目录下)
2.更改了updater-script脚本(在\META-INF\com\google\android目录下)
二:加快GPS搜星定位速度(参考了很多gps.conf脚本最终确定的)
3.更改了gps.conf脚本(在\system\etc目录下)
三:添加自带归宿地显示
4.增加\system\lib\libphoneloc-jni.so和\system\usr\share\phoneloc.dat两个文件并替换Mms.apk和Phone.apk
四:添加了对wma/wmv音乐文件的支持
5.在lib文件夹下加入libomx_wmadec_sharedlibrary.so和libpvasfcommon.so等5个so文件,并在etc目录下增加pvasflocal.cfg文件
五:精简掉一些apk文件
6.比如删除了TtsService.apk以及system下的tts文件夹(这里面放的是Tts的语音数据,删除无妨)
六:纠正了字体显示问题
7.自带的字体显示有种怪怪的感觉,原因是受到了\system\fonts文件夹下一些外文字体的影响,删除后字体就恢复正常了(删除外文字体后,比如DroidSansJapanese.ttf,仍然能够显示Japanese)
七:自定义随机安装的apk文件
8.替换和添加了\system\app和\data\app下的apk文件,很多都修改过名称和图标,看起来更漂亮
八:全局odex化和zipalign优化
9.全局odex化,也就是说对整个framework目录下的所有文件,以及\system\app和\data\app下的apk都进行了odex化,加快软件读取速度。
九:其他
10.修改了开机动画
11.精简了铃音,并添加了一些好铃音(从上百个铃音中挑选出来的),默认铃音要在\system\build.prop中修改,例如,在倒数几行修改ro.config.ringtone=Playa.ogg
待解决的问题:
1.反编译工具不给力,apk编译出来修改之后再反编译回去经常失败!(例如我稍微修改了一下xml文件,然后再反编译就不过~),这里新出来一个教程也许有用http://bbs.anzhi.com/thread-4883812-1-1.html
2.汉化工具不给力(arsc文件编辑器),某些resources.arsc文件打开出错(最根本的方法是通过编译和反编译来汉化,但是反编译经常失败)
3.合并.odex和.apk文件失败,用了smali-1.2.8.jar、baksmali-1.2.8.jar等等一系列的版本,执行命令的时候还是出错。
4.framework-res.apk和SystemUI.apk修改失败,主要是反编译几乎不可能成功,而且9.png文件不知道怎么改。要想2.3.7的通知和下拉栏全局透明真的很麻烦,有很多图片不知道代表什么含义,据说还要改classex.dex中的smali\com\android\systemui\statusbar\StatusBarService.smali文件。网上小白等几位高手有很多作品,但是都是2.3.4的,2.3.7的通知栏和下拉栏的修改方法有所不同,搜遍了整个论坛确实没这方面的作品及教程。
5.修改开机第二屏图片失败,以前都是直接替换掉boot.img里面的logo.bmp文件就可以了,但是2.3版本的boot.img里面没有logo.bmp文件,要替换一个叫initlogo.rle的文件,而且用unpack-bootimg.pl和repack-bootimg.pl两个命令对boot.img进行反编译会出错(好像是地址段的问题),这里有个教程http://chita.lenovomm.com/thread-15242-1-1.html