【图文并茂】人人都会修改APK,美化,汉化,去广告

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情
本贴来源于bbs.mfunz.com/,非本人原创,只是感觉很不错,就转过来,给有需要的朋友参考

也许许多人都曾经想过要修改APK自己DIY,但不知道怎么下手,其实要修改APK并没有想象中的那样复杂,这个虽不能让你成为高手(那要有程序基础才可能),但至少入门是没有问题的,涵盖了大部分的东西,全方位step By step的教你怎么弄这些东西!

一、APK文件结构介绍

二、JAVA环境的搭建

三、常用工具介绍及基本使用

四、APK的美化、汉化、去广告



一、APK文件结构介绍:


简单的认识一下APK文件的结构,apk文件实际是一个zip格式的压缩包,只不过后缀名为.apk,所以我们完全可以通过解压缩工具(例如WINRAR,好压)解开,解开后你将看到大致如下的结构:
|--AndroidManifest.xml
|--META-INF
|  |--CERT.RSA
|  |--CERT.SF
|  |--MAINFEST.MF
|--classes.dex
|--res
|  |--drawable
|  |--layout
|  |--...   
|--resources.arse

Manifest 文件

AndroidManifest.xml是每个应用都必须定义和包含的,它描述了应用的名字、版本、权限、引用的库文件等等信息,如要把apk上传到Google Market上,也要对这个xml做一些配置。

META-INF目录

META-INF目录下存放的是签名信息,用来保证apk包的完整性和系统的安全。在eclipse编译生成一个api包时,会对 所有要打包的文件做一个校验计算,并把计算结果放在META-INF目录下。而在Android平台上安装apk包时,应用管理器会按照同样的算法对包里的 文件做校验,如果校验结果与META-INF下的内容不一致,系统就不会安装这个apk。这就保证了apk包里的文件不能被随意替换。比如拿到一个apk 包后,如果想要替换里面的一幅图片,一段代码, 或一段版权信息,想直接解压缩、替换再重新打包,基本是不可能的。如此一来就给病毒感染和恶意修改增加了难度,有助于保护系 统的安全。

classes.dex文件

classes.dex是java源码编译后生成的java字节码文件。但由于Android使用的dalvik虚拟机与标准的java虚拟机是不兼容 的,dex文件与class文件相比,不论是文件结构还是opcode都不一样。目前常见的java反编译工具都不能处理dex文件。
Android模拟器中提供了一个dex文件的反编译工具dexdump。用法为首先启动Android模拟器,把要查看的dex文件用adb push上传的模拟器中,然后通过adb shell登录,找到要查看的dex文件,执行dexdump xxx.dex。
目前在网上能找到的另一个dex文件的反编译工具是Dedexer。Dedexer可以读取dex格式的文件,生成一种类似于汇编语言的输出。这种输出与jasmin[ ]的输出相似,但包含的是Dalvik的字节码。我们会在下一节详细介绍一下Dedexer。

res 目录

res目录存放资源文件。

resources.arsc

编译后的二进制资源文件

二、JAVA环境的搭建


打开www.oracle.com下载JDK,如图(2-1):
这里同时提供一个JDK下载的直通车地址:
http://pan.baidu.com/share/link?shareid=65637&uk=3625449542



安装JDK,一路下一步,如图(2-2):



配置系统环境变量,以WIN7为例:
我的电脑-->属性-->高级系统设置-->环境变量-->系统变量
新建JAVA_HOME,如图(2-3)
变量名:JAVA_HOME,变量值:JDK的安装目录



新建CLASSPATH,如图(2-4)
变量名:CLASSPATH,变量值:%JAVA_HOME%\lib\*.jar
PS:%JAVA_HOME%表示引用JAVA_HOME的值,相当于程序中的变量,如果不填写%JAVA_HOME%,可以直接填写路径绝对值




编辑path,如图(2-5)
在变量值末尾加上 ;%JAVA_HOME%\bin  
PS:“;”为不同路径之间的分割符



配置完成后,点开始-->运行-->输入CMD回车-->输入JAVA回车,看到如图(2-6)配置成功,否则请仔细检查系统变量是不是配置有误





三、常用工具介绍及基本使用


1、反编译利器apktool
官方下载地址:http://code.google.com/p/android-apktool/downloads/list
(需要下载"apktool-install-windows-2.2_r01-3.tar.bz2"和"apktool1.3.2.tar.bz2"两项,解压出里面的东西)
我们得到需要的3个文件,分别是:aapt.exe、apktool.bat、apktool.jar
当然我这里也提供一个已经包含这三个文件的apktool压缩包:

apktool.zip(4.3 MB, 下载次数: 29)
2012-11-21 15:11 上传
下载次数: 29
下载积分: 金钱 -1 , 贡献 -1


可以将这三个文件直接放到C:\Windows下,这样不用配置环境变量
或者放到任意目录,然后在path变量中追加上该目录

apktool在cmd中两个最基本的命令如下:

反编译:将X盘的abc.apk反编译,并将处理后的文件,放在X盘内的"helloworld"文件夹内.
apktool d X:\abc.apk X:\helloworld
PS:当然在实际应用中,一般都是CMD先定位到要反编译的apk文件目录下,这样命令就不用输入绝对路径,而变成了
apktool d abc.apk helloworld
编译:将"helloworld"文件夹重新编译
apktool b X:\helloworld

特别注意:有些APK文件的编译是需要ROM中的框架的,例如conversation.apk要反编译,同时需要framework里的framework-res/blur-res/moto-res三个apk,简单说一下如何导入框架:

添加framework的命令:
apktool if framework-res.apk
当然多数情况是不用这样的,要编译其它的不需要这些框架的APK请删除导入的文件,见图(3-1)





2、odex文件合并
①什么是ODEX?
Android的ROM中有很多odex文件,相对于APK中的dex文件而言这个odex有什么作用呢? 如果你仔细观察会发现文件名时一一对应的,同时那些对应的apk文件中没有dex文件。这样做可以使其厂商保证一定的反盗版,因为没有没有dex文件的 apk是无法正常安装的,而厂商直接将odex和不完整的apk文件放到手机rom固化到/system/bin中可以让一般用户无法正常导出使用
正常的apk文件中是包含了dex文件,但为了提高运行效率,有些ROM会将apk中的dex文件提取出来并优化,优化后的文件就是odex文件了。。。。
这种ROM提取文件时要把apk和odex文件一起提取。
魔趣的ROM就进行了ODEX化的。你会发现里面的apk文件中并不包含classes.dex文件,多了一个同名的.odex文件
②合并apk和odex文件工具
官方下载地址:http://code.google.com/p/smali/downloads/list
我们需要下载smali.jar和baksmali.jar
这里同时也提供一个已经包含这两个文件的附件:

smali.zip(2.24 MB, 下载次数: 18)
2012-11-21 15:12 上传
下载次数: 18
下载积分: 金钱 -1 , 贡献 -1


③通过odex生成class文件,通过class文件生成dex文件
java -jar baksmali.jar -x abc.odex
执行完上面这行命令后,会生成一个out 文件夹,里面是abc.odex的class文件。
出现问题,可以根据提示把rom中 /system/framework 下的**.jar放到pc上的java环境变量中
java -Xmx512M -jar smali.jar out -o classes.dex
因为apk是zip的mime编码类型,使用winzip或winrar直接拖入到缺少dex文件的apk中即可
当然合并后的完整apk是不能直接安装的,还要重新签名(signapk,auto sign)当然我还是推荐用汉化浪子的这个可视化工具AndroidResEdit

AndroidResEdit.zip(4.73 MB, 下载次数: 23)
2012-11-21 15:13 上传
下载次数: 23
下载积分: 金钱 -1 , 贡献 -1



3、dex2jar和jd-gui
前者是将apk中的classes.dex转化成Jar文件,而JD-GUI是一个反编译工具,可以直接查看Jar包的源代码
下载地址:http://code.google.com/p/laichao/downloads/list
同时这里提供一个已经包含这两个工具的附件:

dex2jarAndJd-gui.zip(1.25 MB, 下载次数: 20)
2012-11-21 15:15 上传
下载次数: 20
下载积分: 金钱 -1 , 贡献 -1



在CMD下定位到文件所在目录并运行命令
dex2jar.bat    classes.dex
生成
classes.dex.dex2jar.jar
生成jar文件的截图如下(3-2):



运行JD-GUI(jd-gui.exe),打开上面生成的jar包,即可看到源代码了,见图(3-3)



好了,工具篇就简单的介绍到这里了


四、APK的美化、汉化、去广告:


1、APK的美化
这个呢是最简单的了,先用apktool反编译,然后替换其中的资源文件,在用apktool重新构建,最后重新签名,一个新的APK就好了。
我们就用魔趣ROM中的framework-res.apk为例,简单看一下怎么完成资源替换美化,这里省略odex文件合并。
点开始-->运行-->输入CMD回车-->定位到工作目录
运行命令:apktool d framework-res.apk framework-res
得到反编译后新的资源文件夹,如图(4-1)




将res/dwawable-hdpi下的相关图标替换掉(图4-2)



当然我这里提供一个资源包,直接用这里面的资源替换原来的资源就可以了

framework-res-change.zip(341.99 KB, 下载次数: 5)
2012-11-21 15:18 上传
下载次数: 5
下载积分: 金钱 -1 , 贡献 -1


替换好后用apktool重新打包并签名,如图(4-3)



重新生成的未签名apk位于dist目录下,如图(4-4)





使用上面附件中提供的AndroidResEdit工具重新签名,如图(4-5)



这样一个新的已经美化好了的APK就完成了
同时这里在提供一个SystemUI的美化资源包

SystemUI-change.zip(203.92 KB, 下载次数: 5)
2012-11-21 15:20 上传
下载次数: 5
下载积分: 金钱 -1 , 贡献 -1


当然如果只是要替换这样图片什么的,没必要用apktool反编译,也可以直接用winara,winzip之类的软件直接不过行解包替换。
2、apk的汉化
这里只讲一下用apktool反编译后汉化,汉化并没有什么技术含量,只要你有一点英文功底,学会用这些简单的工具就可以做到,
你一样是汉化达人,不要羡慕别人多牛多牛啦。
APKTool汉化优点如下:
- 反编译软件安装包,直接修改语言包或添加语言包,大大减少软件汉化后出问题的几率
- 可精简无用的语言
- 可用来去除广告(这个在第3点在说)
首先是反编译APK文件,这里不在重复
解包后在res目录下你会看到很多values-***的文件夹,这就是语言包。
values是英文语言包,values-zh是中国地区语言包(包含港澳台及内地),values-zh-rCN是中文简体语言包(只包含内地),values-zh-rTW是中文繁体语言包(港澳台)。除此以外,其它地区的语言包都是精简的对象,可以不过多了解。
在values文件夹里,通常有arrays.xml、strings.xml等语言文件,要汉化这些文件,可以用Notepad++ Portable打开,如图(4-6):



我们只需要将<string name="###">*****</string>间的*****内容改成中文就行了
另外,除了res文件夹内有语言包需要汉化外,在res文件夹内的layout和xml文件夹内也会有文件需要汉化,同样是用Notepad++ Portable打开,这些文件里面都是代码语句,需要通过搜索功能找到需要汉化的单词来汉化,所以这里建议大家先把原版的软件装上去,再对照单词,边搜索,边汉化。
用Notepad++ Portable修改、添加好语言包后,就可以重新编译打包了
注意事项:
部分情况下,在精简语言后,重新编译打包时,命令窗口会提示public******错误,这是由于values语言包文件夹下的public.xml文件给非values、values-zh-rCN、values-zh-rTW的其它values-***语言包文件里的语言文件定义了字段,但这些语言包都被精简了,定义不了,所以会出错。解决方法有两个:
* 一是按照命令窗口中的提示(有提示public.xml文件的具体哪一行的值没有定义),到相应的语言包里找到那行未定义的代码,复制到values-zh-rCN、values-zh-rTW语言包文件夹内的strings.xml语言文件中。

* 二是按照命令窗口中的提示(有提示public.xml文件的具体哪一行的值没有定义),直接到values语言包文件夹下的public.xml文件中删除没有定义的那几行代码
3、apk去广告
这个说起来就要复杂一些了,当然也并不是很难,只要你学一定就能行的。

先了解下软件的广告原理

一个软件若要显示广告,需要先导入SDK,并在AndroidManifest.xml中注册。
res\layout目录内的xml文件就包含有广告界面的配置代码,修改这些代码就可以去除广告界面。
另外还要屏蔽广告下载源,不然只是单单不显示广告界面而已,软件还会下载广告所需的数据,耗费流量。
目前Android的广告供应商有两个(这个是网上流传的说法,国内实际上有很多,不一一列举),一个是Admob,一个是Google Ads,前者已被后者收购,但两者SDK依然独立

广告代码

Admob的广告代码为:
<com.admob.android.ads.AdView
android:id=”@+id/ad”
android:layout_width=”fill_parent”
android:layout_height=”wrap_content” />
Google Ads的广告代码为:
<com.google.ads.GoogleAdView
android:id=”@+id/adview”
android:layout_width=”wrap_content”
android:layout_height=”wrap_content” />

广告下载源

Admob的广告下载源:
http://r.admob.com/ad_source.php
http://mm.admob.com
http://api.admob.com
Google Ads的广告下载源:
http://pagead2.googlesyndication.com/pagead/afma_load_ads.js

用apktool进行反编译解包(方法上面已经讲过)

①首先去除广告界面
用Notepad++ Portable搜索广告代码,将搜索路径定位到res文件夹(就是反编译后的res文件夹),代码只搜索开头就行了,例如:com.admob.android.ads.AdView 和 com.google.ads.GoogleAdView,当然对于国内的广告你就要使用其它关键字了。
如图:(4-7)




搜索结果4-8)




双击黄颜色区域,修改下图上方的代码
android:layout_width="fill_parent" 修改为 android:layout_width="0.0dip"
android:layout_height="wrap_content" 修改为 android:layout_height="0.0dip"
如图(4-9)



修改后4-10)



再作下解释:
android:layout_width="fill_parent" 修改为 android:layout_width="0.0dip"
android:layout_height="wrap_content" 修改为 android:layout_height="0.0dip"
之所以这么修改,是因为要让广告窗口不显示,android:layout_width定义的是广告窗口的宽度,android:layout_height定义的是广告窗口的高度,0.0dip代表0像素,将两者后面的值修改为0.0dip,那么高和宽都是显示0像素,等于不显示,达到了去广告窗口界面的目的
②去除广告下载源
将搜索路径定位到smali文件夹,用Notepad++ Portable搜索广告下载源地址(若不知道软件用的是哪个供应商的广告的话,最好两家的下载源都搜索下)
如图(4-11)




搜索结果如下4-12)




将广告下载源地址修改成无效的地址(例如0.0.0.0、192.168.1.1等),如图(4-13)




最后完成后用apktool重新构建,并重新签名

当然这样的做法是不破坏软件结构,其实呢更加好的做法是将classes.dex反编译为jar文件,用jd-gui进行查看源代码,对照移除smali目录下的相应代码,破解收费什么的也类似,这个因为涉及到代码的分析,就不在此详细讨论。

【教程完毕】
已有 2 人评分RP值金钱收起理由
sunss+ 1+ 1赞一个!
3721HDP + 5感谢原作者,同谢楼主转来。

总评分: RP值 + 1 金钱 + 6  查看全部评分

安卓Apk布局修改从入门到精通 本次教程的目标是,学会将安卓apk反向工程后,如何找到需要修改布局、对布局修改、对布局进行美化,如何隐藏布局(按钮等),以及如何在界面上添加按钮并响应点击事件,添加图片,添加文本框等控件,认识不同类型的布局和他们的特点。并熟悉常用的布局属性及其作用。 阅读详情

相关推荐

apk反编译修改教程系列---如何简单的汉化apk 手机端与电脑端同步演示【八】

深的为初学友友演示详细的步骤。由此可以增加学习兴趣。当你汉化一个软件分享到网络并且署名后供其他友友使用的时候。成就感满满哦!!!!!!!!!!!!

小马哥的专栏 2803

AndroidResEdit.zip

凭借这一款AndroidResEdit,就能轻松汉化安卓apk文件,修改签名

apk反编译修改教程系列---简单apk开屏广告【五】

当然 如果只是单纯的想除开屏广告。有很多软件可以直接使用。例如 李跳跳 .一指禅.轻启动等或者模块类的都可以解决。

小马哥的专栏 7039

AndroidResEdit

安卓签名工具

年轻人的第一次汉化APK(教程)

可能是全网最详细、易读的汉化 APK 教程,希望大家喜欢。 操作其实很简单。

Martin_Garrix的博客 1万+

[免费专栏] Android安全之Android APP应用程序的汉化功能 (修改so中的字符串内容)

转移发布平台通知:将不再在CSDN博客发布新文章,敬请移步知识星球... ...

橙留香Park的博客 3165

干货教程:APK反编译神器 安卓修改大师,一步步教你如何美化修改安卓应用

APK反编译神器 安卓修改大师 v8.9 破解VIP高级版 本次给大家带来的是 APK反编译神器 安卓修改大师 ,安卓修改大师可以轻松地解编所有APK安装包,替换应用程序界面中的所有文本和图片,代码级别的修改可以增强中文、裂缝、功能,以及向所有界面添加自定义代码和功能。该软件还通过APK安装包直接提供多通道打包工具,而不需要源代码。 功能很好,但是不要用来干坏事儿哦 软件截图 软件名称: 安卓修改大师 软件介绍: 安卓修改大师可以让您轻松将任何APK安装包进行反编译,替换应用程序界面.

1万+

APK汉化经历

GnaCAD汉化

weixin_52847003的博客 1791

安卓玩机-----反编译apk 修改apk 广告 弹窗等操作中的一些常识

对于一个apk文件使用压缩软件7zip打开可以查看到文件组成。使用反编译软件编译后的文件是不同的,这个取决于你使用的反编译软件的功能。不同的反编译软件反编译后的文件略有不同。请区别对待.

小马哥的专栏 1万+

安卓常见布局 & 布局优化

过度绘制:开发者选项(调试GPU过度绘制) 优化方法: 移除默认的Window背景:getWindow().setBackgroundDrawable(null); 移除不必要的背景:ViewPager加载多个Fragment 组成的首页界面,如果每个Fragment都设置有背景色的话,你就可以不用给Activity的根布局设置背景 减少透明度的使用:由于需要混色处理,至少渲染两次 ...

汪子涵的博客 626

APK 广告修改代码级)

APK广告(修改代码级) 作者:PeerLessSoul 时间:2016-07-24 转载请注明版权 准备工具 Java SE Development Kit (JDK) (下载地址) 安装完成后设置全局路径变量  (参考文章) apktool.jar  (下载地址) dex2jar     (下载地址)

PeerLessSoul 1万+

AndroidResEdit.exe+arsceditor.exe

AndroidResEdit.exe+arsceditor.exe手机软件名称,图标修改

教你用安卓神器-APK编辑器(手机端)改程序名+程序广告

先安装“APK编辑器.apk”,然后打开运行,会出现未注册提示,点“否”,然后进入设置,把默认打开路径设置好,然后退出;因为现在不设置的话,当你安装完“APK编辑器-补丁.apk”后就无法设置了,所以必先先设置好!设置好后,然后再安装“APK编辑器-补丁.apk”,之后也可以设置打开路径了!' a6 A6 j& _$ x* z. @% `4 ?  x4 P 下面开始了,先来改程序名称! 1

随缘,随心 3万+

Android应用资源文件替换方法

Android应用资源文件替换方法 仅供学习研究。 一 工具 1 7zip压缩解压缩软件 2 AndroidResEdit签名软件 二 步骤 以替换应用程序图标为例: 1 使用7zip提取android应用apk文件内容,以小蚁摄像机为例 2 进入到解压后的xx-apk/res/drawable-xxx目录下,见下图左则 找到apk的图标图片,一般以ic_launcher.png命名,见上图右侧 可以对图标进行修改,或者使用同等分辨率和宽高的png格式图片替换 ...

wwwyuewww的专栏 4028

安卓逆向006之修改APK资源广告

文章目录前言分析完善思路: 前言 打开,APP总是有开屏广告,比如下边: 好不容易进来,发现刚刚只是冰山一角等等,后边不做演示了。 这里有一点,要说一下,我们每隔一段时间打开游戏,广告内容都是不同的。 且紧跟时代的“ 潮流 ”,这里就可以说明问题了,这是软件联网自动获取的。 既然这样,我们就直接从软件的“ 网络 ”开刀。 分析 反编译APK,打开AndroidManifest.xml查看权限,发现下边都是网络的关键词。 如internet、network、wifi等等。 这里一

划水的小白白 3868

android反编译-修改别人apk(如何无视R文件,使用新增布局xml drawable等)

前言 本文的核心内容是,反编译其他apk,新增页面且不使用动态布局,完全使用开发习惯的xml包括shape 新增图片,一不替换已经存在的R.xxx,二不需要在反编译的apk public.xml中手动注册id,所以核心就是无视public.xml(R文件)完全新增。 点击下载 本文相关工具、代码,module示例包 没有耐心听思考过程的,点击上路的目录,可以直接跳到下面的 —-实...

qq_28844947的博客 4万+

【教程】手把手教你如何修改apk—-安卓软件名称。【来自MIUI】

相信很多机友(特别是有强迫症的童鞋,比如我)遇到过这个问题,甚至可以说是困扰; 很喜欢一款软件,全身上上下下就一个看不顺眼 —— 软件名字; 下面以DEFY基带切换助手4.1这款软件为例,介绍如何修改软件名称。 有截图可以看出,他的名字太长了,有一部分显示不出来,这就足以让一个有重度强迫症的人纠结到睡不着觉。 还可以把软件改成自己喜欢的名字哦。 别告诉重命名可以通过第三方桌面解决,那个没

y97523的专栏 2万+

AndroidResEdit apk汉化软件及详细教程

http://www.opda.com.cn/thread-7016-1-1.html   关于 APK 文件◆    APK 是 Android Package 的缩写,即 Android 安装包。 APK 是类似 Symbian Sis 或 Sisx 的文件格式。通过将 APK 文件直接传到 Android...

坚持,淡定 7073

掌握APK汉化技巧:从英语到中文的软件转换

APK汉化是将Android应用程序中的英文或其他语言文本翻译成中文,以提高中文用户的使用体验。本章将介绍APK汉化的定义、重要性以及它在提升应用本地化方面的作用。我们将探讨汉化的动机、面临的挑战,以及为何专业的汉化工具对于完成这项任务至关重要。APK汉化是指对Android应用程序包文件(APK)中非中文文本的翻译过程,目的是使应用程序更易于被中文用户理解和使用。这一过程通常涉及到从APK文件中提取字符串资源,翻译这些字符串,然后将翻译后的文本重新打包进APK中。

weixin_35835018的博客 1288
上一篇: android-从反编译到打包 - 随心
下一篇: android-读取本地txt文件 - 随心
super_level
博客等级 码龄15年 38粉丝 58原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值