java - 如何将java文件中的一些内容添加到smali文件中?

标签 java android smali

我会尽量说得清楚:) 我想向应用程序添加一个 Activity (我们将其称为 X,以免混淆),以便在应用程序启动时执行此操作:

  • 首先,启动我的 Activity X 并显示包含按钮的布局。
  • 按钮的 OnClickListener 启动原始应用程序的主要 Activity。

我在 eclypse 项目中有 Activity X,所以我可以将我的 java 文件转换为 smali。 我的应用程序位于 smali 文件 + yml 文件中(通过 backsmaling)。

如何将应用程序的主要 Activity 转为正常 Activity ? 如何将我的 Activity X 添加到应用程序中? smali文件夹在哪个文件夹? 我需要更改 yml 文件中的某些内容吗? xml 文件会发生什么情况?

任何形式的帮助将不胜感激! :)

最佳答案

编辑 smali 文件很困难,而且并不意味着您可以通过这种方式向现有 Activity 添加按钮。 smali 是一种类似汇编的语言,允许进行一些调试,但或多或​​少相当于 android dalvik 字节码。

但是,您可以使用不同的启动 Activity 来包装应用程序,因为这不需要在应用程序中进行更改。它甚至可以自动化并被阴暗的第三方市场滥用,将恶意软件放入其他应用程序的启动 Activity 中。

如果你想自己做这件事,你可能会这样做:

  • 在 Eclipse 中创建一个简单的应用程序,其中包含 X Activity 和您要添加的资源。
  • 将该应用编译为 apk。
  • 将另一个您想要修改的应用作为 apk。
  • 使用 apktool 将两者反编译为 smali + 资源。
  • 将所有内容合并到您正在编辑的应用中
  • 使用 apktool 构建 apk。

中间的一些重要步骤:

您的新 X Activity 需要使用 Intent 调用 startActivity setup from Strings因为您没有可以编译的 .class 文件。显然,您需要知道其他应用程序启动 Activity 的包和类名称。除此之外,只需将其设置为使用按钮执行任何 Activity 的方式即可。

两个反编译应用程序的合并主要是简单的复制和粘贴。复制src文件夹,这里不应该有冲突。对于 res 文件夹,您需要知道需要哪些资源,但大多数情况下您只需复制它们即可。对于布局和其他命名资源,请确保首先不要在 X Activity 项目中使用冲突的名称。要“合并”2 个 strings.xml 文件,只需重命名其中一个,文件名应该无关紧要。

最重要的是合并AndroidManifest.xml。您需要添加 X Activity ,包括 "android.intent.category.LAUNCHER"/...MAIN Intent 过滤器。这决定了哪些 Activity 可以直接从启动器启动。同时从不应再启动的其他启动 Activity 中删除过滤器。

重建一个 apk 就可以了。

注意:我没有对此进行详细测试。我认为它可以工作:)

关于java - 如何将java文件中的一些内容添加到smali文件中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27027017/

相关文章:

android - "smali"语法规范 |小日志注入(inject)

java arraylist 包含对象的类型

c# - 从 Java 迁移到 C#

android - 将数据插入 SQLite 时出现间歇性 NPE

java - (MapView 和 1700 个叠加项)。等于 ("Slow")

android - 如何或在何处指定 omx 解码器支持隧道

java - 关联 jOOQ 事务并记录监听器

java - 如何让java中的命令只执行一次?

java - Android中修改APK的部分smali代码后如何定位注册问题?

java - Android .java 文件正在获取的完整格式链列表是什么?