APKTool用法
APKTool是GOOGLE提供的APK编译工具,需要JAVA运行环境,推荐使用JDK1.6或者JDK1.7。
如果你想对APK文件进行修改,那么就不可避免的要使用到APKTool。论坛里有很多关于ROM美化的帖子都需要自己动手修改APK文件,比如修改framework-res.apk、systemUI.apk等等。
相信各位有不少人看了后都想亲自来修改一番,但是结果却是遇到了各式各样的错误却无法进行改正,甚至都不知道自己错在哪里。
一.APKTOOL使用环境配置
1.安装JAVA并设置环境变量。
下载安装都很简单,关键是安装完后还需要亲自设置环境变量以方便其他程序能够条用JAVA。
以WIN7为例,在桌面上右键点击计算机——>属性——>高级系统设置——>环境变量——>在下边的系统变量里新建一个变量,变量名为JAVA_HOME,值为JAVA的安装路径,比如我的是H:\ProgramFiles\Java\jdk1.6.0_26
二.APKTool的安装
1.其实这个谈不上安装,不过如果你愿意的话可以把下载到的APKTOOL中的三个文件(aapt.exe、apktool.bat、apktool.jar)解压缩到你的Windows安装目录下,以方便使用Dos命令.
2.可能有些人下载的APKTOOL里有个安装的bat文件,并且有另外两个方便使用的bat文件,在这里我不推荐大家使用这些bat文件,虽然使用起来很方便(其实我并不觉得方便),但是如果出现错误不方便查看。
三.APKTool的使用
1.decode
该命令用于进行反编译apk文件,一般用法为
apktool d <file.apk> <dir>
<file.apk>代表了要反编译的apk文件的路径,最好写绝对路径,比如C:\MusicPlayer.apk
<dir>代表了反编译后的文件的存储位置,比如C:\MusicPlayer
如果你给定的<dir>已经存在,那么输入完该命令后会提示你,并且无法执行,需要你重新修改命令加入-f指令
apktool d –f <file.apk> <dir>
这样就会强行覆盖已经存在的文件
2.build
该命令用于编译修改好的文件,一般用法为
apktool b <dir>
这里的<dir>就是刚才你反编译时输入的<dir>(如C:\MusicPlayer),输入这行命令后,如果一切正常,你会发现C:\MusicPlayer内多了2个文件夹build和dist,其中分别存储着编译过程中逐个编译的文件以及最终打包的apk文件。
3.install-framework
该命令用于为APKTool安装特定的framework-res.apk文件,以方便进行反编译一些与ROM相互依赖的APK文件。具体情况请看常见问题
四.常见问题
1.关于安装和管理framework文件
以下大部分其实是翻译自http://code.google.com/p/android-apktool/wiki/FrameworkFiles
一般来说,你在使用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尽可能是连续的)
APKTool用法的更多相关文章
- Android APK反编译 apktool使用教程
2017年棋牌游戏突然就火了,正所谓春江水暖鸭先知本猿处在软件行业中就能清晰的感受到市场的变化,最近老家那边也是玩的风生水起,于是最近闲暇时光想到反编译下这些棋牌软件,看看代码实现的思路 (注:反编译 ...
- ApkTool工具
ApkTool: 一款很好的反编译工具,支持Linux和Windows. 如何使用: 1:需要一个JAVA环境.由于之前已经装过JAVA 相关JDK,JRE,不赘述. 2:下载ApkTool工具: ...
- Unity Android加密DLL笔记
unity mono 地址:https://github.com/Unity-Technologies/mono 下载与unity版本对应的unity mono. brew安装:http://brew ...
- apktool 简单使用记录
修改APP:车来了 修改内容:首次启动引导页,中间的点素材修改.样式修改 修改前:未选中为白色,选中为蓝色,间距为5dip 修改后:未选中为红色,选中为黑色,间距为0 前后截图如下: 修改过程: ...
- (转)apktool+dex2jar+jd_gui
转:http://www.cnblogs.com/MichaelGuan/archive/2011/10/25/2224578.html apktool: 可以解析资源文件,比如布局文件xml等,方便 ...
- apktool反编译工具使用详解
文章转自: http://zhangyan1158.blog.51cto.com/2487362/683234 一.APKTOOL使用环境配置 1.安装JAVA并设置环境变量. 下载安装都很简单,关键 ...
- mac下破解apk文件以及apktool的相关使用
Android apktool是一个用来处理APK文件的工具,可以对APK进行反编译生成程序的源代码和图片.XML配置.语言资源等文件,也可以添加新的功能到APK文件中.用该工具来汉化Android软 ...
- EditText 基本用法
title: EditText 基本用法 tags: EditText,编辑框,输入框 --- EditText介绍: EditText 在开发中也是经常用到的控件,也是一个比较必要的组件,可以说它是 ...
- jquery插件的用法之cookie 插件
一.使用cookie 插件 插件官方网站下载地址:http://plugins.jquery.com/cookie/ cookie 插件的用法比较简单,直接粘贴下面代码示例: //生成一个cookie ...
随机推荐
- 项目管理模式之如何去除SVN标记
原问地址:http://blog.csdn.net/djcken/article/details/7916986 当项目不需要SVN标志的时候,我们一般怎么办哪??可能很多人设置Window ...
- Types of AOP
There are two distinct types of AOP: static and dynamic. The difference between them is really the p ...
- Java中String的哈希值计算
下面都是从String类的源码中粘贴出来的 private int hash; // Default to 0 public int hashCode() { int h = hash; if (h ...
- 解决多线程下simpleDateFormat的安全问题
// 日期格式化 private static final ThreadLocal<SimpleDateFormat> GMT_FORMATERS = new ThreadLocal< ...
- JS 时间格式CST转GMT
近几天,在做百度地图时,需要转换时间格式并做显示,但是发现显示的时间格式,出现了错乱,二者的日期和小时都出现了变动.例如: 原始时间格式:Thu Aug 18 20:38:54 CST 2016 转换 ...
- hash表的创建
功能:创建一个hash table.假设有处理冲突,则採用再散列法放置该元素 代码參考<零基础学数据结构> 代码例如以下: root@ubuntu:/mnt/shared/appbox/h ...
- 建立企业内部mavenserver并使用Android Studio公布公共项目
由于Android Studio使用了Gradle构建工具,在library依赖的处理上是将被依赖的library作为一个module引入(拥有一份完整的library拷贝),而Eclipse的ADT ...
- Com编程入门——什么是COM,如何使用COM
本文的目的是为刚刚接触COM的程序员提供编程指南,并帮助他们理解COM的基本概念.内容包括COM规范简介,重要的COM术语以及如何重用现有的COM组件.本文不包括如何编写自己的COM对象和接口. CO ...
- Android项目实战--手机卫士18--读取用户的短信内容以及短信备份
我们今天要说的就是我们手机卫士里面的高级工具里面的短信备份功能啦,其实这个软件备份的功能也很简单,就是把用户的短信读出来,然后写到一个xml或者数据库里面, 但我们这里的是读取到xml里面的. 首先我 ...
- jdbc03 使用servlet实现
<%@page import="cn.bdqn.bean.News"%> <%@page import="cn.bdqn.service.impl.Ne ...