- 浏览: 911323 次
- 性别:
- 来自: 上海
最新评论
-
liu149339750:
我勒个去,搜到你的博客了,关注!
Android make脚本简记 -
ihopethatwell:
楼主,这个修改时间有个问题,退出修改界面就不保存设置的时间了, ...
Android中如何修改系统时间(应用程序获得系统权限) -
flyar520:
你好...我也遇到屏幕半屏刷成黑屏的问题...但是我的时在开机 ...
Android横屏状态下返回到壁纸界面屏幕刷新问题 -
flyar520:
你好...我也遇到屏幕半屏刷成黑屏的问题...但是我的时在开机 ...
Android横屏状态下返回到壁纸界面屏幕刷新问题 -
taowayi:
推荐android一键反编译神器 apkdec
Android apk反编译
主要目标:对于没有SD卡但想要安装运行那些只有SD卡支持的apk程序的(比如仙剑)。
次要目标:apk程序反编译、汉化、修改程序的数据读取和保存路径。
本文针对“思维导图 Thinking Space Pro 2.16”的apk程序ThinkingSpacePro.apk进行修改。题外话,这程序人手配备一个,不错的东西。
一、相关工具(针对windows系统)
- JDK:http://www.oracle.com/technetwork/java/javase/downloads/index.html
下载 windows安装版的程序,安装后不用管它了。 - Apktool:http://code.google.com/p/android-apktool/
下载apktool-install-windows-2.2_r01-3.tar.bz2和apktool1.3.2.tar.bz2,用winrar解压后把解压出来的文件 都放在一个目录下,比如:E:\apktool\ 下(为简单起见,下文都用这个路径为apktool工作目录)。 - Auto-Sign签名工具:N/A
二、反编译
说要把apk“装冰箱(反编译)”分三步走:
- 第一步:先把apk程序(这里用ThinkingSpacePro.apk)程序放到 E:\apktool\ 下。
- 第二步:启动windows的cmd.exe,用命令行cd到 E:\apktool 目录下。
- 第三步:键入命令
- apktool d ThinkingSpacePro.apk
这个命令的格式 是:- apktool d xxx.apk output
其中 d 参数用来指示工具要进行反编译操作,xxx.apk是要反编译的程序,output 源码输出 的路径。如果最后不指定输出的路径,默认是放在同目录下的 xxx 文件夹下(即apk程序名称去掉.apk后的名称)。如果你的apk文件名称中有空格,那键入命令时用双引号引起来,不过为方便起见,反编译之前把apk文件名中的空格都去掉先。
运行反编译命令后会在同级目录下得到一个 ThinkingSpacePro 文件夹,源文件都在里面了。
三、汉化
汉化这个比较简单,在反编译apk程序得到源码后,一般程序的文档都放在
res目录下,都是些xml文档,用记事本之类的打开查看一下,一般都会比较容易看出来哪些是可以汉化的文本。这个就不去弄它了。可能不同程序还有不一样
的,反正英语差点,汉化这种事我也不去深究了。你如果只想汉化的话,进res文件夹找找,完成汉化后就可以直接重新编译程序了(最后讲编译),不用太多的
编程知识。思维导图本身支持多国语言(都在源文件的res文件夹里),所以也用不着汉化了。但大致的汉化过程就是这样了。
另外貌视还有Android ResEdit之类的专用汉化软件
,不用搞什么反编译,用起来可能更简单。
四、SDcard to Flash
对于N5p,app2sd只是一个传说,不过sd2flash下面就可以实现。用SD卡玩机的人可以无视。
下面这个是本文的重点。目的就是要修改程序的默认数据读取和保存路径,主要针对那些必须有SD卡才能使用的程序。比如说一个游戏
它
分为主程序和游戏的关卡数据。主程序可能只有1M,但游戏关卡数据可能是几十甚至上百M,这类游戏一般是主程序安装在内存中,而关卡数据会要求你安装或下
载到SD卡上。如果你没有SD卡,那就玩不成了。我之所以要改它的路径,就是不想让它占我的SD卡,N5p不是自带8G(实际好像只有
6.5G)Flash闪存么,那为什么不用它?下面的修改就是要欺骗apk程序,我们的Flash闪存就是程序你要的SD卡。
正式修
改时,除了要修改所有源文件(主要是.smali程序源文件)中的/sdcard 路径,使之指向 /flash
外,还要修改含有 Environment.getExternalStorageState 和
Environment.getExternalStorageDirectory 的源文件,前者用于检测是否安装SD卡,后者获取SD卡的路径。
那么从头来修改思维导图 Thinking Space Pro 2.16的数据读写路径。原版程序你必须要有SD卡才能正常保存你的数据,修改之后,所有数据读取、保存都针对N5p自己的Flash闪存,从而解放SD卡。
- 用apktool反编译ThinkingSpacePro.apk
- apktool d ThinkingSpacePro.apk
反编译后得到ThinkingSpacePro文件夹,存放着程序源文件。 - 使用UltraFileSearch搜索ThinkingSpacePro文件夹中所有包含"sdcard"文字的文件(搜索 时,UltraFileSearch去掉"Whole word"的选项)。没有UltraFileSearch可以用windows系统自带的搜索工具,只是要用搜索文件中包含有指定内容的文件,而不是搜索 文件名(我的系统搜索工具坏了,所以用UltraFileSearch这个软件代替)。
- 对搜索到的文件(主要是其中的.smali程序源文件)用记事本打开编辑,将文件中所有 "/sdcard" 的字串改成 "/flash" 字串,这样将原先指向 /sdcard 的路径全部指向 /flash 路径。
- 搜索程序中判断SD卡是否安装的方法,修改它使判断SD卡是否安装的方法返回True。一般的检测SD卡是否安装的方法是用下面的代码判断的:
- Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)
所以用UltraFileSearch查找包含有"getExternalStorageState"字串的文件。
有些软件会用这个检测,有些软件则不用它,所以找不到的话可以窃喜:不用那么复杂了。
针对思维导图这个程序,在App.smali中会找到(其它程序不一定在这里)。具体查找到的代码如下:- .method public static isSdPresent()Z
- .locals 2
- .prologue
- .line 476
- invoke-static {}, Landroid/os/Environment;->getExternalStorageState()Ljava/lang/String;
- move-result-object v0
- const-string v1, "mounted"
- invoke-virtual {v0, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
- move-result v0
- return v0
- .end method
这个是Dalvik opcodes,修改它需要一点专业知识(参考这里 ), 修改成如下(后来发现似乎只需要将最后的 return v0 改成 return 1 就可以了,不过没去做测试,对Dalvik opcodes尚未仔细研究过):- .method public static isSdPresent()Z
- .locals 2
- .prologue
- .line 476
- const-string v0, "mounted"
- const-string v1, "mounted"
- invoke-virtual {v0, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
- move-result v0
- return v0
- .end method
改后因为v0始终等于v1,所以这个方法就返回True,这样就欺骗程序我们已经安装了SD卡了。 - 搜索程序中获取SD卡路径的方法,修改它使它返回的路径从原来的指向 sdcard 变成 flash,再次欺骗程序我们的 flash 就是我们的 sdcard。一般的获取SD卡路径的方法如下:
- Environment.getExternalStorageDirectory
注意这个方法返回的是一个java.io.File对象,而不是字符串,修改时要注意这一点。所以用UltraFileSearch搜索包 含"getExternalStorageDirectory"的文件(主要是.smali文件),针对思维导图这个程序会搜索到App.smali和 FileIO.smali二个文件,分别打开修改。具体对于App.smali相关内容如下(FileIO.smali也是类似):- .line 246
- :cond_0
- new-instance v2, Ljava/lang/StringBuilder;
- invoke-direct {v2}, Ljava/lang/StringBuilder;->()V
- invoke-static {}, Landroid/os/Environment;->getExternalStorageDirectory()Ljava/io/File;
- move-result-object v3
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
- move-result-object v2
- sget-object v3, Ljava/io/File;->separator:Ljava/lang/String;
把它修改成如下:- .line 246
- :cond_0
- new-instance v2, Ljava/lang/StringBuilder;
- invoke-direct {v2}, Ljava/lang/StringBuilder;->()V
- const-string v3, "/flash"
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
- move-result-object v2
- sget-object v3, Ljava/io/File;->separator:Ljava/lang/String;
五、重新编译程序
修改完成后,回到cmd.exe窗口,键入重新编译的命令:
apktool b ThinkingSpacePro
第一次编译会出状况,后来发现是源码中的AndroidManifest.xml这个配置文件有问题,在这个文件的倒数第二行:
- <supports-screens android:anyDensity="true" android:smallScreens="true" android:normalScreens="true" android:largeScreens="true" android:xlargeScreens="true" android:resizeable="true" />
问题就出在那个android:xlargeScreens="true"上,好像不支持吧。所以删掉它,变成:
- <supports-screens android:anyDensity="true" android:smallScreens="true" android:normalScreens="true" android:largeScreens="true" android:resizeable="true" />
再次重新编译,成功。
重新编译后,编译输出的apk程序文件保存在 ThinkingSpacePro 子目录下的 dist 文件夹下。
这时候工作都基本完成了,不过,这个生成的apk程序还不能直接安装使用,因为缺少签名。
六、签名
抓鬼用保鲜膜,打鬼用巧克力,签名用Auto-Sign。这个工具的下载和使用方法网上搜吧。我这里不说了,已经出了本文的范围。
另外像物理空间Space Physic这个游戏的修改方法与此类似,不过它还要简单一点。还有像仙剑,它的修改不用涉及Dalvik
opcodes,所以更简单,不过,它的不同点在于还要修改.so文件(.so文件相当于动态连接库dll文件),对.so的修改时用hedit等二进制
编辑工具打开后将 "/sdcard" 替换为 "//flash" 即可。
全当抛砖引玉,你可能有不同的目的来修改原程序,不过万变不离其宗,大致如此。
如果你仍然不知道我上面改来改去到底在改什么,那么可以在你的N5p不插SD卡的情况下安装原版的思维导图这个软件,看能不能正常运行和使用;然后,卸载原版,同样在不插SD卡的情况下,安装我的修改版,看能否正常运行和使用了。
题外话,仙剑这个程序修改后能运行,但过了几分钟就自动退出,原先以为我修改的有问题,后来拿原版的用SD卡玩,一样没过几分钟就自动退出,网上一搜都有这种情况,所以不是我改的有问题,原本程序移植的就有问题。
最后提供思维导图和仙剑的Flash版(不需要SD卡即可运行),FLASH_ThinkingSpacePro2.16.apk、FLASH_PAL31.apk。对于仙剑这里只提供主程序,游戏数据用论坛
的那个原版的,把 pal 上传到 N5p的flash闪存中(而不需要SD卡),就是连接电脑
后出现的 "N5 Pro" 的那个磁盘(这个仙剑移植的不咱地,无故自动退出、菜单不支持触摸需要物理按键、分辨率太低造成大大的马赛克等等),安装FLASH_PAL31.apk即可。
修改程序的下载地址:http://u.115.com/file/t597954474
仙剑原版(只用数据):http://bbs.imp3.net/viewthread.php?tid=962491&extra=&highlight=%CF%C9%BD%A3&page=1
发表评论
-
Android JNI 编程常见小问题
2015-09-08 11:31 1178extern "C" { jint Jav ... -
Android ServiceManager注册自定义service
2015-08-19 09:53 4085当我们要使用android的系统服务时,一般都是使用Conte ... -
Android ALMP 架设web服务器配置
2014-10-08 18:48 1412随着信息时代的发展,智能手机已经越来越普及。下面本文将带大家把 ... -
Android UiAutomator 自动化测试
2014-07-04 17:39 9863一、一个BUG引发的问题 ... -
Android XP MTP支持
2014-03-18 16:41 2210家里电脑是win7,连上直接豌豆荚装驱动就好了。但单位的XP却 ... -
Android Launcher2 icon大小修改
2012-08-16 19:12 5984不同分辨率、不同屏幕的不同设备,android 原生的Laun ... -
android 浏览器APN切换
2012-04-16 16:42 2257业务需求:有些链接需 ... -
android 浏览器全屏显示
2012-04-16 16:40 4828业务需求:浏览器设置中支持全屏显示的功能。 分析:只需要在 ... -
Android MD5校验码的生成与算法实现
2012-03-05 15:05 20298在Java中,java.security.MessageDi ... -
Android View的xml属性
2012-02-27 13:25 2784java.lang.Object andro ... -
Android Gallery3D源码学习总结(三)——Cache缓存及数据处理流程
2011-12-29 11:04 4631第一,在应用程序中有三个线程存在:主线程(随activity的 ... -
Android Gallery3d源码学习总结(二)——绘制流程drawThumbnails
2011-12-29 11:02 2861此函数控制相册表格页 ... -
Android Gallery 3D 特效精华
2011-12-29 10:45 5256Android Gallery 3D 特效精华 一、布 ... -
Android Gallery3d源码学习总结(一)——绘制流程drawFocusItems
2011-12-29 10:42 2670显示单张图片相关的输入变量 int selecte ... -
Android:AppWidget,PendingIntent,RemoteViews用法
2011-11-25 10:09 5809什么是AppWidget?AppWidget就是我们平常在 ... -
Android软件汉化/精简/去广告教程
2011-08-23 12:32 2856前言: 现在随处都可以找到功能强大的汉化工具,操作简 ... -
Android ListView页眉页脚效果
2011-07-06 14:07 2631大家都知道,在我们调用ListView的addFooterVi ... -
Android 获取设备信息
2011-06-22 21:09 7887)android 获取设备型号、OS版本号: imp ... -
Android 应用安装设置
2011-05-31 16:18 1833应用程序的默认安装位置以及是否可移动取决于该程序的开发者的配置 ... -
Android Activity去除标题栏和状态栏
2011-05-31 13:10 40416一、在代码中设置 public void onCreate( ...
相关推荐
安卓android apk 反编译步骤 。亲自实现总结,决不是粘贴复制
android apk反编译工具1.5.2版
工具包中包含反编译所需工具:apktool_2.3.1.jar,dex2jar-2.0.zip,jd-gui-windows-1.4.0.zip。以及使用方式。
android apk反编译工具,中文图形化界面版
安卓apk反编译工具,android app反编译工具。用于学习
Android apk反编译工具集,包含apktool,dex2jar,jd-jui。
这个是Android反编译工具,一步到位:从资源文件的反编译,dex到class的反编译以及class到java文件的反编译,欢迎下载使用。
Apk反编译工具包括了apktool、dex2jar和jd-gui三个工具,apktool用于apk反编译获取资源文件等,dex2jar用于分析classes.dex文件,jd-gui可以用于打开dex2jar分析生成的classes-dex2jar.jar文件从而查看源代码。
Android反编译工具包括集合:apktool、dex2jar、jdgui、Smali2Java
Android APK反编译 ,apktools及详细操作
android apk 反编译,根据安apk查看源代码
Android反编译工具合集,APK反编译工具合集 apktool dex2jar jd-gui,全是开源项目下载,工具无一漏,百分百实用,Android必备。 啥,不会用? 百度,Google教你~~~
android apk反编译全套教学加工具 android apk反编译全套教学加工具
Android反编译软件 安卓反编译 Android APK反编译详解,有详细说明,简单易学!
Android APK反编译工具反编译工具包 Android反编译工具(主要有 apktool,dex2jar, jd-gui )
Androidapk反编译之androidAPK有效加密方法.pdf
AndroidApk反编译 里面包含三种反编译方式。dex odex 反编译java文件 反编译 xml文件。