- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试将 imageview 注入(inject)到反编译的 apk 的 smali 代码中。但是 imageview 使用的 drawable 需要它自己的唯一资源标识符。到目前为止,在没有从 apktool 获取构建错误的情况下,我一直未能成功添加新的资源标识符。任何帮助将不胜感激。以下是我采取的步骤:
第 1 步:
在 public.xml 文件中找到最后一个资源 ID。就我而言:<public type="menu" name="search_item_minioverflow" id="0x7f0d0003" />
.
将 id 从十六进制转换为文本,这给了我以下内容:2131558403。将数字增加 1 并将其转换回十六进制:0x7f0d0004。
第 2 步:
粘贴带有递增 ID 的新资源:<public type="drawable" name="cross" id="0x7f0d0004" />
进入 public.xml 文件。
第 3 步:
粘贴带有递增 id 的新静态字段:.field public static final cross:I = 0x7f0d0004
进入 R$drawable.smali 文件。
最后:
我尝试使用 apktool 构建反编译的 apk,但收到以下构建错误:
res\values\public.xml:986: error: Public resource drawable/cross has conflicting type codes for its public identifiers (0x2 vs 0xd).
W:
brut.androlib.AndrolibException: brut.common.BrutException: could not exec (exit code = 1): [C:\Users\user\AppData\Local\Temp\brut_util_Jar_6742820997882567173.tmp, p, --forced-package-id, 127, --min-sdk-version, 14, --target-sdk-version, 25, --version-code, 111, --version-name, 5.2.1, --no-version-vectors, -F, C:\Users\user\AppData\Local\Temp\APKTOOL3513689331380739071.tmp, -0, arsc, -0, png, -0, arsc, -I, C:\Users\user\AppData\Local\Temp\1.apk, -S, C:\Users\user\Desktop\tune\res, -M, C:\Users\user\Desktop\tune\AndroidManifest.xml]
编辑: 这是被注入(inject)的 smali 代码,它在从中获取的 apk 中正常运行:
.method public showDialog()V
.locals 6
.line 92
new-instance v0, Landroid/widget/RelativeLayout;
invoke-virtual {p0}, Lcom/example/MainActivity;->getApplicationContext()Landroid/content/Context;
move-result-object v1
invoke-direct {v0, v1}, Landroid/widget/RelativeLayout;-><init>(Landroid/content/Context;)V
.line 93
.local v0, "overlay":Landroid/widget/RelativeLayout;
new-instance v1, Landroid/widget/RelativeLayout$LayoutParams;
const/4 v2, -0x1
invoke-direct {v1, v2, v2}, Landroid/widget/RelativeLayout$LayoutParams;-><init>(II)V
.line 94
.local v1, "params":Landroid/widget/RelativeLayout$LayoutParams;
invoke-virtual {v0, v1}, Landroid/widget/RelativeLayout;->setLayoutParams(Landroid/view/ViewGroup$LayoutParams;)V
.line 95
const/4 v2, 0x0
invoke-virtual {v0, v2}, Landroid/widget/RelativeLayout;->setBackgroundColor(I)V
.line 96
invoke-virtual {v0, v2}, Landroid/widget/RelativeLayout;->setClickable(Z)V
.line 97
invoke-virtual {v0, v2}, Landroid/widget/RelativeLayout;->setFocusable(Z)V
.line 99
new-instance v3, Landroid/widget/ImageView;
invoke-virtual {p0}, Lcom/example/MainActivity;->getApplicationContext()Landroid/content/Context;
move-result-object v4
invoke-direct {v3, v4}, Landroid/widget/ImageView;-><init>(Landroid/content/Context;)V
.line 100
.local v3, "cross":Landroid/widget/ImageView;
const v4, 0x7f060055
invoke-virtual {v3, v4}, Landroid/widget/ImageView;->setImageResource(I)V
.line 102
new-instance v4, Landroid/widget/RelativeLayout$LayoutParams;
const/4 v5, -0x2
invoke-direct {v4, v5, v5}, Landroid/widget/RelativeLayout$LayoutParams;-><init>(II)V
move-object v1, v4
.line 103
const/16 v4, 0xb
invoke-virtual {v1, v4}, Landroid/widget/RelativeLayout$LayoutParams;->addRule(I)V
.line 104
invoke-virtual {v3}, Landroid/widget/ImageView;->getDrawable()Landroid/graphics/drawable/Drawable;
move-result-object v4
invoke-virtual {v4}, Landroid/graphics/drawable/Drawable;->getIntrinsicHeight()I
move-result v4
div-int/lit8 v4, v4, 0x2
invoke-virtual {v3}, Landroid/widget/ImageView;->getDrawable()Landroid/graphics/drawable/Drawable;
move-result-object v5
invoke-virtual {v5}, Landroid/graphics/drawable/Drawable;->getIntrinsicWidth()I
move-result v5
div-int/lit8 v5, v5, 0x2
rsub-int/lit8 v5, v5, 0x50
invoke-virtual {v1, v2, v4, v5, v2}, Landroid/widget/RelativeLayout$LayoutParams;->setMargins(IIII)V
.line 105
invoke-virtual {v3, v1}, Landroid/widget/ImageView;->setLayoutParams(Landroid/view/ViewGroup$LayoutParams;)V
.line 107
invoke-virtual {v0, v3}, Landroid/widget/RelativeLayout;->addView(Landroid/view/View;)V
.line 109
new-instance v2, Landroid/app/Dialog;
const v4, 0x1030010
invoke-direct {v2, p0, v4}, Landroid/app/Dialog;-><init>(Landroid/content/Context;I)V
.line 110
.local v2, "topDialog":Landroid/app/Dialog;
invoke-virtual {v2, v0}, Landroid/app/Dialog;->setContentView(Landroid/view/View;)V
.line 111
invoke-virtual {v2}, Landroid/app/Dialog;->show()V
.line 113
return-void
.end method
最佳答案
您不应该找到最后一个资源 ID,而是要找到您要添加的类型的最后一个资源 ID。您将 1 递增到菜单的资源 ID。
您不能只对任何资源类型使用任何资源 ID。 ID 的第 3 位和第 4 位(x
之后)表示类型。例如,至少在您的项目中,0d
用于菜单类型,而 02
用于可绘制类型。
相反,在您的 public.xml 中查找类型为“drawable”的最后一个 ID(注意,它们不是按递增顺序排列的)并将其加 1。它应该是 0x7f02xxxx
+ 1。
关于android - 如何在由 apktool 反编译的应用程序中为可绘制对象添加新的资源标识符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52742731/
我已经从 https://bitbucket.org/iBotPeaches/apktool/downloads 下载了 apktool_2.1.1.jar 和 apktool_2.0.0rc4.ja
我尝试在我的 Windows 7 计算机上运行 android APKtool,但出现标题中显示的错误。我已经下载了 APKtool-install-windows-r05-ibot、APKtool1
当我尝试通过apktool提取apk文件时api,相关的提取过程永远不会完成。 相同的代码适用于 Java 项目。但是当我通过虚拟设备在 Android 应用程序中使用它时,提取过程永远不会完成。 这
我从网站上下载了 Apktools,得到了 2 个文件:Apktool.txt 和 Apktool_2.2.2。我按照说明将 Apktool_2.2.2 重命名为 Apktools.jar。然后我去了
我正在尝试将 imageview 注入(inject)到反编译的 apk 的 smali 代码中。但是 imageview 使用的 drawable 需要它自己的唯一资源标识符。到目前为止,在没有从
所以我需要编辑一个apk。我看过一些有关如何使用 apktool 执行此操作的指南。 我已经安装了 jre 1.7、Android SDK 和 apktool。 我已经把apktool.jar、apk
android list xml 文件不包含该信息。 android.yml 文件可以。更改后,apk 构建命令不会生成 apk 文件。有没有可以用来编辑版本号的build.gradle文件或工具?
我可以使用 apktool 解码 apk,然后为我的普通 android 项目重新构建。 但是当我对依赖于库项目 (appcompat) 的项目尝试同样的事情时,它失败并出现以下错误。 我是否需要使用
我需要在 Windows 上反编译 & 重新编译一个 apk... 我正在关注此链接 Reverse Engineer APK 问题是我找不到发出请求的文件(请参阅上面的链接)“找到发出请求的文件 g
我已经在我的 mac 上使用 apktools 反编译了一个 apk,想知道是否可以更改 apktools 上的 png 图标和启动画面,如果可以的话如何更改,因为我在网上找不到任何指导 最佳答案 如
我用反编译了一个apk apktool d -d myapp.apk 然后我在res/drawabe中添加一个png图像最后我用“apktool b”重新编译了 apk 但实际上我认为我的图片没有映射
我已经使用建议的 gradle 方法为 android 设置了 crashlytics,并且在 android studio 中运行时一切正常。我收到了崩溃报告、统计数据和所有预期的内容(顺便说一句,
我正在尝试对 MIUI Android 2.3.5 ROM (Mms.apk) 附带的键盘应用程序的布局进行一些小改动。将文件重新编译回 apk(并使用 jarsigner 对其进行签名)并使用 ad
据我所知,apktool 和 baksmali 都能够从 .apk (.dex) 文件中生成 smali 代码,并且 apktool 使用 dexlib2。它们都是APK打包/解包工具 但我仍然不清楚
我需要在签名的 APK 文件中增加 versionCode。 我执行以下操作: apktool d myapk.apk 打开apktool.yml,增加versionCode并保存 apktool b
我使用 APKTool 2.0 Beta 9 反编译了一个 APK,然后在不更改源代码的情况下重新构建了所有 APK。然后我使用这个命令重建了 APK: java -jar apktool.jar b
我用 apktool 解码了一个 apk 文件,我没有改变任何东西。之后,我再次构建它,然后尝试安装 apk,但即使进行了一些基本更改,我仍收到以下错误。 我使用 Windows cmd 做了什么:
我使用了 apktool 2.0.0 rc4 版本并使用该工具解压了 CP.apk 文件,然后修改了一个文件并尝试使用“apktool b CP test.apk”命令重新打包 输出如下,但是工作目录
基本上,当用户上传 .apk 文件时,我需要对其进行解码并从 apk 中的 AndroidManifest.xml 文件中提取一些信息。当我从命令行 apktool decode BluetoothC
我按照此处提到的说明进行操作 - http://ibotpeaches.github.io/Apktool/install/ for Mac OS 安装Apktool 2.X 版本。我将下载并重命名的
我是一名优秀的程序员,十分优秀!