如何将代码注入现有的Apk?

时间:2014-11-20 10:17:58

标签: android apk gamepad

我知道这可以反编译并重新编译apk。我看到了这篇文章:Injecting code into APK 之前,但我想要的不是反编译或逆向工程

在我的情况下,我只是想制作一些使用与游戏手柄兼容的触摸事件的游戏。我见过一些公司做过这样的事情,让Android游戏与他们的游戏手柄兼容。 不幸的是,我找不到将一些代码注入现有apk的解决方案。

所以我的问题是:

有没有办法对apk进行一些更改(更改游戏应用程序中的触摸和键事件)并在不影响真实源代码的情况下添加一些代码?

2 个答案:

答案 0 :(得分:3)

对于像这样简单的事情,你需要的只是baksmali / smali。只需将一个调用插入到自定义类中的程序集中,您就可以用Java编写其余的调用。

反编译/重新编译很少起作用,无论如何都对这种情况有点过分。使用smali甚至可以用于混淆的应用程序,尽管有些应用程序会自行计算完整性检查,如果修改则会拒绝运行。

答案 1 :(得分:1)

为此,首先您将此apk反编译为源代码 用于反编译apk的目的是

第1步:

创建一个新文件夹并复制要解码的.apk文件。

现在将此.apk文件的扩展名重命名为.zip(例如,从filename.apk重命名为filename.zip)并保存。现在你可以访问classes.dex文件等了。在这个阶段你可以看到drawables而不是xml和java文件,所以继续。

第2步:

现在在同一文件夹(或新文件夹)中提取此.zip文件。

下载dex2jar(https://code.google.com/p/dex2jar/downloads/detail?name=dex2jar-0.0.9.15.zip&can=2&q=)并将其解压缩到同一个文件夹(或新文件夹)。

将classes.dex文件移动到dex2jar文件夹中。

现在打开命令提示符并将目录更改为该文件夹(或NEW FOLDER)。然后编写d2j-dex2jar classes.dex并按Enter键。您现在在同一文件夹中有classes_dex2jar.jar文件。

下载java反编译器(http://jd.benow.ca/),双击jd-gui,单击打开的文件,然后打开该文件夹中的classes.dex.dex2jar文件:现在获取类文件。

通过src名称保存所有这些类文件(在jd-gui中,单击文件 - >保存所有源)。在这个阶段,你得到java源代码,但.xml文件仍然不可读,所以继续。

第3步:

现在打开另一个新文件夹

输入要解码的.apk文件

下载最新版本的apktool(https://code.google.com/p/android-apktool/downloads/detail?name=apktool1.5.2.tar.bz2&can=2&q=)和apktool安装窗口(https://code.google.com/p/android-apktool/downloads/detail?name=apktool-install-windows-r05-ibot.tar.bz2&can=2&q=)(两者都可以从同一个链接下载)并将它们放在同一个文件夹中

下载framework-res.apk并将其放在同一个文件夹中(并非所有apk文件都需要此文件,但它不会受到伤害)

打开命令窗口

导航到APKtool的根目录并输入以下命令:apktool if framework-res.apk

apktool d myApp.apk(其中myApp.apk表示您要解码的文件名)

现在你在该文件夹中找到一个文件夹,可以轻松读取apk的xml文件。

第4步:

它不是任何步骤只是将两个文件夹的内容(在这种情况下都是新文件夹)复制到单个文件夹

并更新源代码......