zoukankan      html  css  js  c++  java
  • Android系统玩家技术宝典

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

     

    然后跟随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

  • 相关阅读:
    ftp-server(对象存储)
    zabbix监控VMware6.7
    linux安装中文字体
    vsftpd不支持目录软链接的解决办法
    linux内网IP如果判断出网IP地址
    mysql ANSI_QUOTES 这个sql_mode的作用(字段可以使用双引号)
    查看tomcat项目中,具体占用cpu高的线程。
    nginx ssl 自签证书实验
    Redis复制和哨兵部署
    利用Python脚本备份服务器上所有PostgreSQL数据库
  • 原文地址:https://www.cnblogs.com/zollty/p/2879265.html
Copyright © 2011-2022 走看看