Android APK反编译得到Java源代码和资源文件
- 格式:docx
- 大小:26.49 KB
- 文档页数:8
Android是个神奇的货,近两年比较火热,学习他的人也比较多,但是对于很多初学者来说比较头疼,(当然本人也很菜鸟),今天在学习一个安卓项目时,苦于找不到源代码,无奈只好下载网上现成的.apk文件,顿时好奇能不能反编译看到源代码呢?答案是肯定的!让我们行动起来!
首先,我们将文件的后缀名改为.zip。
这时候我们将可以解压这个文件,如图:
此处我们已经看到一个压缩文件了,打开它。
注意我们的重点是.dex 文件
这个classes.dex是个好东西呀!
然后,然后……
我们需要下两个软件:
dex2jar下载地址:/p/dex2jar/
JD-GUI下载地址:http://java.decompiler.free.fr/?q=jdgui
把我们刚找到的classes.dex拷贝到dex2jar的目录下吧(与dex2jar.bat在同一个目录下),然后运行dex2jar.bat classes.dex,将会生成一个文件classes_dex2jar.jar。
快OK 啦~~~~
运行jd-gui.exe 直接将classes_dex2jar.jar 拖进去吧,瞧!我们要的出来了!。
Apk反编译1.获取xml文件信息要用到apktool工具,利用工具包Androidby下的“Androidby反编译工具.exe”反编译syslog.apk反编译出来的文件夹syslog跟syslog.apk是在同一层:2.反编译dex获取java源代码Apltool只能编译smail,不能编译dex文件,所以要用到dex2jar文件用dex2jar文件下的“dex2jar.bat”操作,直接将syslog文件夹下的“classes.dex”拖到“dex2jar.bat ”文件下编译,得到“classes_dex2jar.jar”文件,该文件与“classes.dex”在同一层;利用dex2jar\jd-gui-0.3.5.windows文件夹下的‘jd-gui.exe’查看得到的‘classes_dex2jar.jar’文件查看结果如下:详细分析:1:注册消息:病毒注册并响应了3个消息,分别是:启动完成、监控拨出电话、接收短信,以便实现对应的功能。
注册服务:实现服务的定时启动2:权限:android.permission.READ_PHONE_STATE读取电话状态android.permission.MODIFY_PHONE_STATE修改电话状态android.permission.BROADCAST_STICKY允许一个程序广播常用intentsandroid.permission.PROCESS_OUTGOING_CALLS允许程序监视、修改有的是关播出电话android.permission.RECEIVE_BOOT_COMPLETED开机自动启动android.permission.UPDATE_DEVICE_STATS更新设备状态android.permission.INTERNAL_SYSTEM_WINDOW允许打开窗口使用系统用户界面android.permission.ADD_SYSTEM_SERVICE允许程序发布系统级服务android.permission.VIBRATE允许访问振动设备android.permission.SEND_SMS允许发送短息android.permission.RECEIVE_SMS允许拦截接收短信android.permission.READ_SMS允许读短信数据库android.permission.WRITE_SMS允许修改短信数据库android.permission.INTERNET允许连接网络android.permission.CHANGE_CONFIGURATION允许一个程序修改当前设置,如本地化android.permission.WAKE_LOCK允许使用PowerManager的WakeLocks保持进程在休眠时从屏幕消失android.permission.STATUS_BAR允许一个程序扩展收缩在状态栏,android开发网提示应该是一个类似Windows Mobile中的托盘程序android.permission.ACCESS_WIFI_STATE允许程序访问Wi-Fi网络状态信息android.permission.DEVICE_POWER允许访问底层电源管理android.permission.DISABLE_KEYGUARD允许程序禁用键盘锁android.permission.WRITE_APN_SETTINGS允许程序写入API设置android.permission.CHANGE_WIFI_STATE允许程序改变Wi-Fi连接状态android.permission.ACCESS_NETWORK_STATE允许程序访问有关GSM网络信息android.permission.CHANGE_NETWORK_STATE允许程序改变网络连接状态android.permission.BROADCAST_SMS允许程序广播一条短信回执android.permission.WRITE_SETTINGS允许程序读取或写入系统设置android.permission.WRITE_EXTERNAL_STORAGE允许写SD卡不法分子就通过这些来获取:1. str2 =localCursor.getString(localCurso r.getColumnIndexOrThrow("address")).toString();//读取电话号码2. Date localDate = newDate(Long.parseLong(localCursor.getString(localCursor.getClumnIndexOrThrow("date")).toString()));//读取时间3.((AlarmManager)paramContext.getSystemService("alarm")).set(2, SystemClock.elapsedRealtime() + paramInt * 1000,pendingIntent); //我们设定一个时间,然后在该时间到来时,AlarmManager为我们广播一个我们设定的Intent,启动后台4.Cursor localCursor =paramContext.getContentResolver().query(localUri, null,null, null, null);//通过游标查询出收件箱的地址5. 每隔1500s发送一次报告public static final int TimerReportInSeconds= 1500;6.如果接收到的短信以”,”开始,则清除控制信息,同时提取短信中的号码并发送报告。
安卓脱壳机是一种用于提取安卓应用程序(APK)的工具,它的原理是通过解析APK文件,提取其中的代码和资源文件。
具体来说,安卓脱壳机的工作流程如下:
1. 解析APK文件:安卓脱壳机首先会解析APK文件的结构,包括AndroidManifest.xml文件、classes.dex文件和资源文件等。
2. 提取DEX文件:安卓应用程序的核心代码是存储在classes.dex文件中的,安卓脱壳机会提取出这个DEX文件。
3. 反编译DEX文件:安卓脱壳机会对提取出的DEX文件进行反编译,将其转换为可读的Java代码。
4. 提取资源文件:安卓应用程序还包含一些资源文件,如图片、音频等,安卓脱壳机会将这些资源文件提取出来。
通过以上步骤,安卓脱壳机可以将APK文件中的代码和资源提取出来,方便进行分析和修改。
这对于安全研究人员、逆向工程师和开发者来说是非常有用的。
需要注意的是,使用安卓脱壳机进行逆向工程可能涉及到法律和道德问题,应该
遵守相关法律法规和道德准则。
Android APK反编译得到Java源代码和资源文件一、反编译apk生成程序的源代码和图片、XML配置、语言资源等文件工具下载:地址:/p/android-apktool/downloads/list如下图,途中红圈的两个都要下载。
将上面2个文件解压到同一个文件夹下面,将有3个文件被解压出来,如下图所示打开cmd命令行窗口定位到刚才解压的文件夹下,即apktool.bat所在的文件夹,如下图所示1. 将APK反编译将待反编译的apk文件放到c盘根目录下,特别注意,一定要放到根目录下。
输入反编译命令apktool d c:\xxxxx.apk c:\***文件夹命令行解释:apktool d [要反编译的apk文件] [输出文件夹]如:注意:demo文件夹不能是已存在的文件夹,否则会报错2. 将反编译完的文件重新打包成APK很简单,输入apktool b c:\***文件夹(你编译出来文件夹)即可。
二、反编译apk得到Java源代码工具下载:dex2jar:/p/dex2jar/downloads/listJD-GUI:/p/innlab/downloads/detail?name=jd-gui-0.3.3.windows.zi p&can=2&q=如下图的两个文件:具体步骤:1. 解压上面两个压缩文件。
2. 从apk文件中解压出classes.dex,将它复制到dex2jar.bat所在的文件夹下3. 命令行下定位到dex2jar.bat所在的目录,然后运行dex2jar.bat classes.dex如图:注:classes.dex不一定要复制到这个文件夹下,在其前面加上路径也是一样的,这里只是为了输命令方便。
如上图所示,看到Done表示成功,将得到下图中红圈内所示的jar文件4. 然后双击jd-gui.exe,打开刚才生成的jar文件,即可看到下图如此,便可看到代码了。
附上上文中所有用到的工具:apk2android.rar在此郑重声明:分享此文,不是为了破解别人的软件,完全是一种学习态度,代码要自己手敲出来才会有感情的。
AndroidStudio反编译APK获取代码资源
1.要准备的三个⼯具
1. apktool:获取资源⽂件,提取图⽚⽂件,布局⽂件,还有⼀些XML的资源⽂件
2. dex2jar:将APK反编译成Java源码(将classes.dex转化为jar⽂件)
3. jd-gui:查看2中转换后的jar⽂件,即查看Java⽂件
2.使⽤apktool反编译APK获得图⽚与XML资源:
把下载好的apktool解压后,我们可以看到下述⽂件(忽略那两个csdn,⼀个是反编译的apk,⼀个是反编译后⽂件):
接下来,双击cmd.exe,来到命令⾏,键⼊: apktool.bat d csdn.apk 即可,Enter回车:
然后就可以看到⽣成的csdn⽂件夹,⾥⾯就有我们想要资源
好的,就是XML资源到⼿了是吧!图⽚素材也到⼿了!
3.使⽤dex2jar将classes.dex转换成jar⽂件:
把下载好的dex2jar⽂件夹解压,apk解压后中的classes.dex复制到dex2jar.bat所在的⽬录下:
打开cmd,来到这个⽬录下:键⼊:d2j-dex2jar.bat classes.dex
接着我们可以看到,⽣成了⼀个jar包:
好的,转换完成!
4.使⽤jd-gui查看jar包中的Java代码:
好的,打开jd-gui的⽂件夹
打开后,打开我们3中转换后的jar包,我们可以看见⾥⾯的代码:
csdn的客户端竟然不混淆代码...可能是本着开源的精神吧,给我们学习代码吧!⼀般的话,apk发布都会进⾏混淆,然后进⾏⼀些加密,或者使⽤第三⽅的加密平台,⽤的⽐较多的"爱加密",有兴趣的也⾃⾏百度查看更加详细的介绍!。
AndroidApk的破解:反编译、修改资源代码、重新打包、签名⼯具准备apktool附上Mac安装说明:Download Mac (Right click, Save Link As apktool)Download apktool-2 ()Rename downloaded jar to apktool.jarMove both files (apktool.jar & apktool) to /usr/local/bin (root needed)Make sure both files are executable (chmod +x)Try running apktool via cli问题:⽣成的都是smail ⽂件,JD-GUI能查看jar⽂件。
dex2jarTools to work with android .dex and java .class filesJD-GUIJava Decompiler实验步骤提取资源$apktool d xxx.apk提取jar将xxx.apk改名成xxx.apk.zip,⽤压缩⼯具解压⽂件,得到classes.dex⽂件。
运⾏d2j-dex2jar.sh classes.dex, 得到classes-dex2jar.jar$cd dex2jar-2.0/$chmod u+x *.sh$cd ../xxx.apk/$../dex2jar-2.0/d2j-dex2jar.sh classes.dex查看java代码使⽤JD-GUI打开classes-dex2jar.jar,界⾯中选择class⽂件即可查看java代码。
修改代码注意,修改代码及资源,最好的⽅式是修改apktool反编译后的资源级smali代码。
JD-GUI查看的java代码不适宜修改,因为修改后还需要重新转换成smali,才能重新编译打包会apk。
⾄于smali的修改,则要学习smali语⾔的语法了,smali是⼀种类似汇编语⾔的语⾔,具体语法可⾃⾏上⽹学习。
详解Android的反编译和代码混淆前⾔包括以下内容1. 要反编译apk需要下⾯3个⼯具2. 反编译资源⽂件3. 反编译类⽂件4. 代码混淆要反编译apk需要下⾯3个⼯具1、apktool(资源⽂件获取)作⽤:资源⽂件获取,可以提取图⽚⽂件和布局⽂件进⾏使⽤查看2、dex2jar(源⽂件获取)作⽤:将APK反编译成java源码(classes.dex转化成jar⽂件)3、jd-gui作⽤:查看APK中classes.dex转化成的jar⽂件,即源码⽂件下⾯进⾏反编译资源⽂件和类⽂件:反编译资源⽂件资源⽂件:包括图⽚资源、布局资源、动画、样式等其他资源这样资源⽂件都可以看得到了。
反编译类⽂件⽅式⼀:反编译得到Java类1.下载并解压dex2jar-2.0,得到dex2jar-2.0⽂件夹,⾥⾯包含dex2jar.bat及其⽂件2.将apk⽂件改为xx.zip⽂件,并解压得到classes.dex⽂件,并将其复制到dex2jar-2.0⽂件夹中3⽣成⼀个classes-dex2jar.jar⽂件,使⽤jd-gui.exe打开⽣成的classes-dex2jar.jar⽂件⽅式⼆:直接使⽤smali2java⼯具什么是smali?smali是将Android字节码⽤可阅读的字符串形式表现出来的⼀种语⾔,可以称之为Android字节码的反汇编语⾔。
代码混淆只能混淆java类,不能混淆资源⽂件。
系统定义的组件不能混淆。
必须是导出的apk。
如何实现代码混淆混淆类⽂件修改module:app下的build.gradlebuildTypes {release {//是否需要混淆,默认false代表不混淆,true代表混淆minifyEnabled true//混淆需要⽤到的⼀个⼯具:proguard,对应的⼀个⽂件是:proguard-android.txt(这个⽂件在android-sdk \tools\proguard⽬录下)//proguard是⼀个压缩、优化和混淆Java字节码⽂件的免费⼯具proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'}在proguard-rules.pro中添加:把下⾯代码,放⼊proguard-rules.pro⽂末:#指定代码的压缩级别-optimizationpasses 5#包明不混合⼤⼩写-dontusemixedcaseclassnames#不去忽略⾮公共的库类-dontskipnonpubliclibraryclasses#优化不优化输⼊的类⽂件-dontoptimize#预校验-dontpreverify#混淆时是否记录⽇志-verbose# 混淆时所采⽤的算法-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*#保护注解-keepattributes *Annotation*# 保持哪些类不被混淆-keep public class * extends android.app.Fragment-keep public class * extends android.app.Activity-keep public class * extends android.app.Application-keep public class * extends android.app.Service-keep public class * extends android.content.BroadcastReceiver-keep public class * extends android.content.ContentProvider-keep public class * extends android.app.backup.BackupAgentHelper-keep public class * extends android.preference.Preference-keep public class com.android.vending.licensing.ILicensingService#如果有引⽤v4包可以添加下⾯这⾏-keep public class * extends android.support.v4.app.Fragment#忽略警告-ignorewarning##记录⽣成的⽇志数据,gradle build时在本项⽬根⽬录输出###apk 包内所有 class 的内部结构-dump class_files.txt#未混淆的类和成员-printseeds seeds.txt#列出从 apk 中删除的代码-printusage unused.txt#混淆前后的映射-printmapping mapping.txt########记录⽣成的⽇志数据,gradle build时在本项⽬根⽬录输出-end###### #####混淆保护⾃⼰项⽬的部分代码以及引⽤的第三⽅jar包library########-libraryjars libs/umeng-analytics-v5.2.4.jar#三星应⽤市场需要添加:sdk-v1.0.0.jar,look-v1.0.1.jar#-libraryjars libs/sdk-v1.0.0.jar#-libraryjars libs/look-v1.0.1.jar#如果不想混淆 keep 掉-keep class com.lippi.recorder.iirfilterdesigner.** {*; }#友盟-keep class com.umeng.**{*;}#项⽬特殊处理代码#忽略警告-dontwarn com.lippi.recorder.utils**#保留⼀个完整的包-keep class com.lippi.recorder.utils.** {*;}-keep class com.lippi.recorder.utils.AudioRecorder{*;}#如果引⽤了v4或者v7包-dontwarn android.support.**####混淆保护⾃⼰项⽬的部分代码以及引⽤的第三⽅jar包library-end####-keep public class * extends android.view.View {public <init>(android.content.Context);public <init>(android.content.Context, android.util.AttributeSet);public <init>(android.content.Context, android.util.AttributeSet, int);public void set*(...);}#保持 native ⽅法不被混淆-keepclasseswithmembernames class * {native <methods>;}#保持⾃定义控件类不被混淆-keepclasseswithmembers class * {public <init>(android.content.Context, android.util.AttributeSet);}#保持⾃定义控件类不被混淆-keepclassmembers class * extends android.app.Activity {public void *(android.view.View);}#保持 Parcelable 不被混淆-keep class * implements android.os.Parcelable {public static final android.os.Parcelable$Creator *;}#保持 Serializable 不被混淆-keepnames class * implements java.io.Serializable#保持 Serializable 不被混淆并且enum 类也不被混淆-keepclassmembers class * implements java.io.Serializable {static final long serialVersionUID;private static final java.io.ObjectStreamField[] serialPersistentFields;!static !transient <fields>;!private <fields>;!private <methods>;private void writeObject(java.io.ObjectOutputStream);private void readObject(java.io.ObjectInputStream);ng.Object writeReplace();ng.Object readResolve();}#保持枚举 enum 类不被混淆如果混淆报错,建议直接使⽤上⾯的 -keepclassmembers class * implements java.io.Serializable即可#-keepclassmembers enum * {# public static **[] values();# public static ** valueOf(ng.String);#}-keepclassmembers class * {public void *ButtonClicked(android.view.View);}#不混淆资源类-keepclassmembers class **.R$* {public static <fields>;}#避免混淆泛型如果混淆报错建议关掉#–keepattributes Signature#移除log 测试了下没有⽤还是建议⾃⼰定义⼀个开关控制是否输出⽇志#-assumenosideeffects class android.util.Log {# public static boolean isLoggable(ng.String, int);# public static int v(...);# public static int i(...);# public static int w(...);# public static int d(...);# public static int e(...);#}#如果⽤⽤到Gson解析包的,直接添加下⾯这⼏⾏就能成功混淆,不然会报错。
Android APK反编译详解(附图)分类:Android 2011-08-28 22:42 29996人阅读评论(31) 收藏举报这段时间在学Android应用开发,在想既然是用Java开发的应该很好反编译从而得到源代码吧,google了一下,确实很简单,以下是我的实践过程。
在此郑重声明,贴出来的目的不是为了去破解人家的软件,完全是一种学习的态度,不过好像通过这种方式也可以去汉化一些外国软件。
一、反编译Apk得到Java源代码首先要下载两个工具:dex2jar和JD-GUI前者是将apk中的classes.dex转化成Jar文件,而JD-GUI是一个反编译工具,可以直接查看Jar包的源代码。
以下是下载地址:dex2jar:/files/dex2jar-0.0.7-SNAPSHOT.zipJD-GUI:/files/jdgui.zip具体步骤:首先将apk文件,将后缀改为zip,解压,得到其中的classes.dex,它就是java 文件编译再通过dx工具打包而成的;解压下载的dex2jar,将classes.dex复制到dex2jar.bat所在目录。
在命令行下定位到dex2jar.bat所在目录运行dex2jar.bat classes.dex生成classes.dex.dex2jar.jar生成jar文件的截图如下:运行JD-GUI(jd-gui.exe),打开上面生成的jar包,即可看到源代码了HelloAndroid源码(编译前的apk源码对照)如下:二、反编译apk生成程序的源代码和图片、XML配置、语言资源等文件如果是只是汉化软件,这将特别有用。
首先还是下载工具,这次用到的是apktool下载地址:/p/android-apktool/downloads/list下载:apktool1.4.1.tar.bz2和apktool-install-windows-r04-brut1.tar.bz2(两个包都下载)具体步骤:将下载的两个包解压到同一个文件夹下,应该会有三个文件:aapt.exe,apktool.bat,apktool.jar在命令行下定位到apktool.bat文件夹,输入以下命令:apktool d C:\*.apk C:\*文件夹,如下图:命令行解释:apktool d [apk文件 ] [输出文件夹]反编译的文件如下(AndroidManifest.xml为例):特别注意:你要反编译的文件一定要放在C盘的根目录里将反编译完的文件重新打包成apk,很简单,输入apktool b c:\***文件夹(你编译出来文件夹)即可,命令如下:打包apk后的文件在目录C:\HelloAndroid下,生成了两个文件夹:builddist其中,打包生成的HelloAndroid.apk,在上面的dist文件夹下,Ok注:本android反编译教程,是在Windows 7 Ultimate 64bit ,测试通过上述反编译工具包下载另外,作为应用开发者,肯定不希望自己的代码被反编译的,下一遍博客中讲述如何通过混淆代码放在反编译:Android如何防止apk程序被反编译。
APK反编译过程
一、用.rar打开apk文档,得到文档结构图如下所示
二、将classes.dex文件解压出来,然后使用工具反编译成.jar文件,再进一步
反编译出java文件
1.在cmd下进入dex2jar.bat所在路径,然后输入“dex2jar.bat XXX”,XXX
指的是你要反编译的apk中的classes.dex文件所在路径及名称,比如:
我的dex2jar.bat在D:\Android\apk_decode\dex2jar-0.0.7-SNAPSHOT路径
下, classes.dex在D:\Android下,所以:你进入dex2jar.bat路径下后,
输入dex2jar.bat D:\Android\classes.dex,这样会生成一个jar文件。
2.用rar解压出jar文件中的class文件,然后用jad或DJ Java Decompiler
反编译工具将.class文件反编译成.java文件
3.不解压出jar中的class文件,直接用JD GUI工具打开jar文件
4.步骤2和3选择其中一个即可,建议用步骤2,步骤3可能出现乱码
三、AndroidManifest.xml等xml文件直接打开也是乱码,完全看不懂,想看看别人是怎么布局的都不容易。
首先下载AXMLPrinter2.jar工具,把下下来的工具和xml文件放到同一个文件夹下,然后在DOS命令下,进入到AXMLPrinter2.jar的目录下,使用命令:java -jar AXMLPrinter2.jar AndroidManifest.xml
即可看到代码。
四、图片可以直接从步骤一中解压出来
五、OK!。
Android APK反编译得到Java源代码和资源文件2011年3月9日iStar发表评论阅读评论这段时间在学Android应用开发,在想既然是用Java开发的应该很好反编译从而得到源代码吧,google了一下,确实很简单,以下是我的实践过程。
在此郑重声明,贴出来的目的不是为了去破解人家的软件,完全是一种学习的态度,不过好像通过这种方式也可以去汉化一些外国软件。
一.反编译Apk得到Java源代码首先要下载两个工具:dex2jar和JD-GUI,前者是将apk中的classes.dex转化成Jar文件,而JD-GUI是一个反编译工具,可以直接查看Jar包的源代码。
以下是下载地址:dex2jar:/files/dex2jar-0.0.7-SNAPSHOT.zip JD-GUI:/files/jdgui.zip具体步骤:1.首先将apk文件,将后缀改为zip,解压,得到其中的classes.dex,它就是java文件编译再通过dx工具打包而成的;2.解压下载的dex2jar,将classes.dex复制到dex2jar.bat所在目录。
在命令行下定位到dex2jar.bat所在目录,运行dex2jar.bat classes.dex生成classes.dex.dex2jar.jar3.运行JD-GUI,打开上面生成的jar包,即可看到源代码了。
二.反编译apk生成程序的源代码和图片、XML配置、语言资源等文件如果是只是汉化软件,这将特别有用。
首先还是下载工具,这次用到的是apktool,下载地址:/p/android-apktool/,apktool-1.0.0.tar.bz2和apktool-install-windows-2.1_r01-1.zip两个包都要下。
具体步骤:1.将下载的两个包解压到同一个文件夹下,应该会有三个文件:aapt.exe,apktool.bat,apktool.jar;2.在命令行下定位到apktool.bat文件夹,输入以下命令:apktool d C:\***.apk C:\***文件夹命令行解释:apktool d [要反编译的apk文件 ] [输出文件夹],特别注意:你要反编译的文件一定要放在C盘的根目录里;3.将反编译完的文件重新打包成apk,很简单,输入apktool b c:\***文件夹(你编译出来文件夹)即可。
dex2jar和JD-GUI这2个工具配合学习android太靠谱了,所以放上来给大家共享,开源的好处就是好东西大家一起分享。
dex2jar下载地址:/files/dex2jar-0.0.7-SNAPSHOT.zipJD-GUI下载地址:windows版JD-GUI:/files/jdgui.zipLinux版JD-GUI:/files/jd-gui-0.3.2.linux.i686.tar.gz1.首先找到Android软件安装包中的classes.dex把apk文件改名为.zip,然后解压缩其中的classes.dex文件,它就是java文件编译再通过dx工具打包成的,所以现在我们就用上述提到的2个工具来逆方向导出java源文件2.把classes.dex拷贝到dex2jar.bat所在目录。
windows系统下:在命令行模式下定位到dex2jar.bat所在目录,运行 dex2jar.bat classes.dex ,生成classes.dex.dex2jar.jarUbuntu系统下:(3楼正解!)在终端下定位到dex2jar.sh所在目录,运行sh dex2jar.sh classes.dex则可生成classes.dex.dex2jar.jar3.运行JD-GUI工具(它是绿色无须安装的)打开上面的jar文件,即可看到源代码一个APK反编译利器Apktool(android汉化)2010-07-19 18:52 转载自:/s/blog_5752764e0100kv34.htmlAPK 本地化[/viewthread.php?tid=3873]说起APK的汉化,目前大部分教程都是让用Hex Workshop或者Android ResEdit来做。
但是实际1、Hex Workshop操作繁琐,经常出现搜不到想要修改的字符的情况;2、Android ResEdit简单用用可以,修改稍微复杂一点就会出现整条整条丢字符串的情况;并且——谁能保证我的本地化语言就一定比原来的短呢?现在好了,老外写的《android-apktool》软件,可以帮助我们把APK反编译,生成程序的源代码言资源等文件。
我们对图片和语言资源等文件修改后,可以再把它们编译打包成APK,签名后就化/修正版APK了。
《android-apktool》软件软件可以访问它的主页/p/android-apktool/下0.0.tar.bz2和apktool-install-windows-2.1_r01-1.zip两个包都要下。
下载后解开,为了方把得到的4个文件复制到C:\Windows文件夹里。
这个工具是Java写的,需要你的电脑安装了JRE或者JDK,并在系统环境变量Path里加入java.以上准备工作做好后,就可以用它来反编译APK了。
这里我用动态壁纸的APK来做示范。
如果用过动态壁纸,你也许会发现在设置壁纸时,界面的显示有点问题:“动态壁纸”,在手机上中这是“动态壁纸选择器”LiveWallpapersPicker.a pk的翻译错误造成的。
(假设LiveWallpapersPicker.apk放在C盘根目录)开始 > 运行,输入cmd,回车。
1.apktool d "C:\LiveWallpapersPicker.apk" "C:\LiveWallpapersPicker"复制代码(命令行解释:apktool d 要反编译的文件输出文件夹)这样,LiveWallpapersPicker.apk就被反编译了,输出内容在C:\LiveWallpapersPicker文件夹打开C:\LiveWallpapersPicker文件夹,我们发现里面有一些XML文件和一些文件夹。
绝大部分源都在res文件夹里,我们这个例子当然不例外。
打开res文件夹,可以其中又是很多文件夹。
(又是)绝大部分情况下,语言资源都放在values* es放默认语言(英语居多),values-de放德语,values-fr放法语等等。
一般我们关心的是valu 和values-zh- rTW(繁体中文)。
打开values-zh-rCN文件夹,其中有个strings.xml。
打开看看:<?xml version="1.0" encoding="UTF-8"?><resources><string name="application_name">动态壁纸选择器</string><string name="live_wallpaper_picker_title">当前壁纸</string><string name="live_wallpaper_preview_title">当前壁纸预览</string><string name="configure_wallpaper">设置...</string><string name="wallpaper_instructions">设置壁纸</string><string name="live_wallpaper_empty">无当前壁纸。
</string><string name="set_live_wallpaper">设置壁纸</string><string name="wallpaper_title_and_author">%1$s提供者:%2$s</string><string name="live_wallpaper_loading">正在载入当前壁纸…</string></resources>很好,就是它了。
把“当前壁纸”都改为“动态壁纸”,再检查和修正标点——中文内容用中文标标点问题,目前马大哈太多了)后,保存。
本例改这么多就够了。
其它复杂的APK建议把res文件夹里的内容都检查下,至少你关心的语言下。
改完后,就可以重打包了。
还是在cmd命令行里,输入:1.apktool b "C:\LiveWallpapersPicker"复制代码(命令行解释:apktool b 要打包内容所在文件夹)就可以了。
生成的APK在C:\LiveWallpapersPicker\dist文件夹里,叫out.apk。
这个out.apk是没有签名的,所以不能直接装到手机里。
签名工具和方法见http://www.hiapk.c 1-1.html,这里不说了。
签名后得到的APK,就是可以装到手机里的了。
操练:去掉免费版软件的广告条[/viewthread.php?tid=18082]打开google code发现Apktool更新了,居然支持win了。
那本文就是一篇介绍在windows环境下使用Apktool的笔记。
安装1.先装JAVA环境,JDK/JRE都行,官网下载装过的就跳过吧2.下载apktool.jar及相关文件,这里下apktool-1.0.0.tar.bz2 和apktool-install-wind3.解压apktool.jar到 C:\Windows 解压apktool-install-windows.zip到任意文件夹(例如E盘4.Win+R 运行CMD,用cd命令转到apktool-install-windows所在文件夹,输入apktool看看。
成功了。
Apktool 命令apktool d XXX.apk ABC 反编译 XXX.apk到文件夹ABCapktool b ABC 从文件夹ABC重建APK,输出到ABC\dist\out.apk然后我们反编译一枚软件玩玩…AutoMemoryManager的免费版底部有一条广告,去掉它吧。
把com.lim.android.automemman.apk放到同文件夹(我的就是E盘根目录)Win+R 运行CMDE:<回车>E:\>apktool d com.lim.android.automemman.apk AMM <回车>I: Baksmaling…I: Decoding resource table…I: Decoding resources…I: Copying assets and libs…现在文件被decode到E:\AMM了,打开E:\AMM\res\layout\main.xml看,所有都可见了吧~编辑第59行<com.admob.android.ads.AdView android:id=”@id/ad” android:layout_width=”fill_paren eight=”wrap_content” admobsdk:backgroundColor=”#ff000000″ admobsdk:textColor=”#f eywords=”Android application” />改为<com.admob.android.ads.AdView android:id=”@id/ad” android:layout_width=”0.0dip” a =”0.0dip” admobsdk:backgroundColor=”#ff000000″ admobsdk:textColor=”#ffffffff” a ndroid application” />然后CMD输入E:\>apktool b AMMI: Checking whether sources has changed…I: Smaling…I: Checking whether resources has changed…I: Building resources…I: Building apk file…用Auto-sign签名E:\AMM\dist\out.apk 安装这样广告就不见了再看,嘿嘿~很帅吧…这其实就是改了AndroidManifest.xml里的ADmob广告ID罢了windows下安装APK文件到Android模拟器的方法2010-07-20 18:29文章转载自:/html/201003/1268078962ID1594.html一、安装APK文件到模拟器Android手机使用的执行文件为APK格式,类似于Windows平台的exe文件。