单色空间吧 关注:246贴子:9,751
  • 14回复贴,共1

<教程>第一框,第一课:学会反编译和回编译

取消只看楼主收藏回复

一楼贴课表:
第一框:APK
第一课:反编译与回编译以及APKTOOL注意事项
第二课:了解apk文件特性结构和简单汉化,美化。
第三课:了解apk美化有关知识(XML文件结构,语法,五大布局,定义资源)
第四课:smali代码,dex,相关。
第二框:刷机包。
第一课:刷机包类型,结构。
第二课:搭建ROM厨房
第三课:厨房工具使用
第四课:自定义一个ROM


1楼2014-02-04 14:20回复
    除了以上这些,其他的没提到再补充说明。


    2楼2014-02-04 14:21
    收起回复
      反编译:
      所需工具:apktool包,Java环境,windows system。
      首先搭建Java环境:自己在百度搜索“jdk”随便找个下载了,大小在123MB左右。
      下载好后安装:一直选下一步就行。如图:
      这一步注意我圈出来的地方,安装位置必须知道。可以更改到自己喜欢的位置(其间不能出现中文名)

      这部完后可能会弹出继续安装一个JRE,点击安装即可。
      安装完后打开CMD命令窗口,这个应该都会吧。"开始菜单-运行-CMD“(win8用户直接”win键+X+A”即可打开。输入JAVA,可出现下图所示表示Java软件包安装成功。


      3楼2014-02-04 14:38
      回复
        接下来配置Java环境:如图。按照顺序。




        我这块已经弄好了,就显示的是编辑,你们点击新建即可。

        具体输入内容:
        JAVA_HOME 和CLASSPATH
        变量名: JAVA_HOME
        变量值: C:\Program Files\Java\jdk1.7.0
        变量名: CLASSPATH
        变量值: .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;
        变量名: Path
        变量值: %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;
        记得变量名前面的半角符号 “ . ” 。
        path变量添加时不要直接粘贴进去,拉到最前面,再粘贴。


        4楼2014-02-04 14:53
        收起回复
          然后继续CMD命令行,输入JAVAC会显示如图所示即为配置正确。


          5楼2014-02-04 14:55
          收起回复
            好了,apktool下载地址
            http://pan.baidu.com/s/1c0cNCze


            6楼2014-02-04 14:56
            回复
              解压apktool到任意盘根目录(好打地址)
              包含三个文件,aapt, apktool.jar, apktool.bat
              把你要反编译的apk放到这个目录下,此时文件有 aapt, apktool.jar, apktool.bat 你的apk.apk
              然后用CMD CD到你解压apktool的这个盘 ,
              比如我在F盘解压着,apktool目录为F:\ApkTool
              则CD到这个位置的命令为:
              输入 F:
              回车后显示 F:\>
              再输入 CD apktool
              显示 F:\apktool>
              这样,就CD到apktool目录了。
              然后 apktool if ****.apk
              继续 apktool d ****.apk
              过会就好了。


              7楼2014-02-04 15:10
              收起回复
                额,没人我不更了。


                8楼2014-02-04 15:11
                回复
                  然后就可以看到图中的目录文件,打开会有如下文件夹,我勾选的是回编译后的文件夹。反编译后没那两个。


                  12楼2014-02-04 16:01
                  回复
                    然后就是自己肆意的修改美化啦,这块暂时不讲如何修改美化等。
                    修改完后,回编译,代码: apktool b framework-res
                    等会后就会生成我勾选的那两个文件夹。如图出现 “Buliding apk file"即为回编译成功


                    13楼2014-02-04 16:07
                    回复
                      注意事项:
                      1:每个命令单词见必须空格,例如: APKTOOL空格IF空格FRAMEWORK-RES.APK
                      2:基本上apk不能被二次打包,意思就是修改美化过一次的apk包,不能被二次反编译,会提示错误,即使部分apk可以反编译,也会提示can'find****,虽然反编译了,但最终是不能回编译打包的。
                      3:不要使用apktool2.0版本,我提供的是1.52版,这个较稳定。2.0最新版不太稳定,我更新过一次使用时就出错了。
                      4:回编译提示出错后,不必再次尝试。解决方法是看出错提示第一行,会给出那个文件的第几行代码出错(无效指令smali, 或者代码中指向的资源文件未添加,或者id值被占用,越位等等。详见后面的)
                      5:回编译后,不要直接将生成的apk文件(位置在dist中)替换回体统或者签名。因为apktool生成的apk文件压缩方式和普通apk不同(普通apk是存档压缩)。正确做法应该是提取生成的apk文件中的resources.arsc(资源检索或资源目录)文件和你修改的那个文件替换到未修改的源apk中。再把替换过后的源apk放回系统或签名。
                      6:有关第五步,有些资源文件在回编译后不可见,比如framework-res.apk 中的values等文件夹在回编译后是不显示的,(这个不是隐藏问题,不要尝试通过显示隐藏文件来找到他们,没用)。此时你却修改了values中的某个文件,这时要提取并替换,但看不到文件,怎么办?正解如下:把生成的apk中的res目录整个拉到源apk中,并且全部替换即可。


                      16楼2014-02-04 16:26
                      回复

                        常见问题
                        1.关于安装和管理framework文件
                        一般来说,你在使用apktool进行反编译前不需要做其他的事情,然而由于有的厂商,如HTC,三星等,他们定制了framework文件并且在他们的系统应用中使用了这些文件,这时,为了能正常的反编译这些apk文件,你就必须从你的设备中拷贝出framework文件并且安装到apktool中。
                        举一个例子,比如你想反编译HTCHero这款手机中的HtcContacts.apk,当你尝试反编译的时候,你会得到以下错误信息。
                        $ apktool d HtcContacts.apk
                        I: Loading resource table...
                        I: Decoding resources...
                        I: Loading resource table from file: /home/brutall/apktool/framework/1.apk
                        W: Could not decode attr value, using undecoded value instead: ns=android, name=drawable, value=0x02020542
                        ...
                        W: Could not decode attr value, using undecoded value instead: ns=android, name=icon, value=0x02020520
                        Can't find framework resources for package of id: 2. You must install proper framework files, see project website for more info.
                        这就是在通知你必须先安装HTC定制的framework文件,事实上在修改一些三星的系统应用时也是如此。
                        以三星的设备来举例,你需要复制两个framework文件来进行安装,framework-res.apk和tzframework-res.apk,一般来说,这两个文件在手机中的位置应该是system\framework\
                        使用以下代码进行安装
                        apktool if C:\framework-res.apk
                        apktool if C:\tzframework-res.apk
                        这里假设2个文件都放在C盘根目录
                        2.直接用build编译后在dist中找到的apk文件无法使用
                        其实这个问题我也不是特别理解,目前知道的就是,APK文件虽然本质是个zip文件,但是事实上zip包中的文件是按照两种方式压缩的,即XML文件进行deflate压缩,其他文件不进行压缩(使用store存储),而直接编译得到的APK文件对任何的文件都进行了deflate压缩,因此你会发现编译得到的文件比原文件小好多。
                        同样的,当你使用build文件夹中的文件替换原apk文件中的资源时,请务必确认是使用store存储还是deflate压缩
                        3.其他错误
                        其实在编译过程中会遇到很多其他的问题,大多数是由于删除、修改、添加了资源后,没有对应的修改res\values\public.xml文件而造成的,这里我给大家说下修改的原则:
                        第一,public.xml文件中的资源不能重复定义。
                        第二,public.xml文件中的任意两个资源的ID不能一样
                        第三,public.xml文件中定义的资源必须能找到该文件(如果你删除了一些文件,必须要对应的删除public.xml中的该行)
                        第四,public.xml文件中尽可能全面(如果你添加了某资源,最好确保在public.xml中也添加)
                        第五,public.xml文件中的资源的ID尽可能连续(当你为添加的文件添加声明时,赋予的ID尽可能是连续的)


                        17楼2014-02-04 16:32
                        回复
                          好了,今天就教这些,这是最基本的,想学就跟着学。会的人不要喷就好。
                          提醒:要想学这些,就不要想着手机端反编译,手机不是万能的,手机上修改代码不方便。你看看有几个高手是在纯手机端制作ROM?手机只是测试用的。不是定制ROM的。(虽然现在手机端可以定制ROM,但毕竟功能有限)。不行了就在电脑上改。


                          18楼2014-02-04 16:37
                          收起回复
                            好了 今天就说这几个,不会的,不懂得可以私我 或者@我。或者查度娘。还有,如果还是人很少,我就不更了,想学的私自加我关注,底下单独教。


                            19楼2014-02-04 16:40
                            回复
                              大家记者:每一次学会了就给底下回个表示会了的贴,好让我知道你们会了,就能开下一课


                              24楼2014-02-04 18:28
                              回复