Android系统玩家技术宝典

来源:互联网 发布:软件逻辑构成 编辑:程序博客网 时间:2024/04/20 05:24

安卓手机用了快一年了,买来就刷机,但开始啥都不懂,于是就百度,找到了机锋网上同学们的教程,一步步学会了。

 

然后跟随G大又转战安智网。从2.1官方修改版,到2.2橘子版,然后到最近的2.3姜饼版,刷过几十次机!大大小小的软件、游戏用过几百个。系统和软件也经常被自己修修改改,后来发布自己的ROM……

(2010年的手机,256M的RAM,600 MHz的CPU,为了运行流畅,我们将整个手机的性能几乎优化到了极致!)

 

------------------ 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