Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
keyescgm
jadx
提交
07d7e68d
J
jadx
项目概览
keyescgm
/
jadx
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
J
jadx
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
07d7e68d
编写于
5月 20, 2021
作者:
S
Skylot
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix: format Android resources ids as hex (#1171)
上级
8785c33d
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
22 addition
and
2 deletion
+22
-2
jadx-core/src/main/java/jadx/core/codegen/ClassGen.java
jadx-core/src/main/java/jadx/core/codegen/ClassGen.java
+4
-1
jadx-core/src/main/java/jadx/core/utils/android/AndroidResourcesUtils.java
...n/java/jadx/core/utils/android/AndroidResourcesUtils.java
+17
-0
jadx-core/src/main/java/jadx/core/xmlgen/XmlGenUtils.java
jadx-core/src/main/java/jadx/core/xmlgen/XmlGenUtils.java
+1
-1
未找到文件。
jadx-core/src/main/java/jadx/core/codegen/ClassGen.java
浏览文件 @
07d7e68d
...
@@ -43,6 +43,7 @@ import jadx.core.dex.nodes.RootNode;
...
@@ -43,6 +43,7 @@ import jadx.core.dex.nodes.RootNode;
import
jadx.core.utils.CodeGenUtils
;
import
jadx.core.utils.CodeGenUtils
;
import
jadx.core.utils.ErrorsCounter
;
import
jadx.core.utils.ErrorsCounter
;
import
jadx.core.utils.Utils
;
import
jadx.core.utils.Utils
;
import
jadx.core.utils.android.AndroidResourcesUtils
;
import
jadx.core.utils.exceptions.CodegenException
;
import
jadx.core.utils.exceptions.CodegenException
;
import
jadx.core.utils.exceptions.JadxRuntimeException
;
import
jadx.core.utils.exceptions.JadxRuntimeException
;
...
@@ -402,7 +403,9 @@ public class ClassGen {
...
@@ -402,7 +403,9 @@ public class ClassGen {
if
(
encodedValue
.
getType
()
==
EncodedType
.
ENCODED_NULL
)
{
if
(
encodedValue
.
getType
()
==
EncodedType
.
ENCODED_NULL
)
{
code
.
add
(
TypeGen
.
literalToString
(
0
,
f
.
getType
(),
cls
,
fallback
));
code
.
add
(
TypeGen
.
literalToString
(
0
,
f
.
getType
(),
cls
,
fallback
));
}
else
{
}
else
{
annotationGen
.
encodeValue
(
cls
.
root
(),
code
,
encodedValue
);
if
(!
AndroidResourcesUtils
.
handleResourceFieldValue
(
cls
,
code
,
encodedValue
))
{
annotationGen
.
encodeValue
(
cls
.
root
(),
code
,
encodedValue
);
}
}
}
}
else
if
(
fv
.
isInsn
())
{
}
else
if
(
fv
.
isInsn
())
{
InsnGen
insnGen
=
makeInsnGen
(
fv
.
getInsnMth
());
InsnGen
insnGen
=
makeInsnGen
(
fv
.
getInsnMth
());
...
...
jadx-core/src/main/java/jadx/core/utils/android/AndroidResourcesUtils.java
浏览文件 @
07d7e68d
...
@@ -74,6 +74,23 @@ public class AndroidResourcesUtils {
...
@@ -74,6 +74,23 @@ public class AndroidResourcesUtils {
return
false
;
return
false
;
}
}
/**
* Force hex format for Android resources ids
*/
@SuppressWarnings
(
"RedundantCast"
)
public
static
boolean
handleResourceFieldValue
(
ClassNode
cls
,
ICodeWriter
code
,
EncodedValue
encodedValue
)
{
if
(
encodedValue
.
getType
()
==
EncodedType
.
ENCODED_INT
&&
isResourceClass
(
cls
))
{
code
.
add
(
String
.
format
(
"0x%X"
,
((
Integer
)
encodedValue
.
getValue
())));
return
true
;
}
return
false
;
}
public
static
boolean
isResourceClass
(
ClassNode
cls
)
{
ClassNode
parentClass
=
cls
.
getParentClass
();
return
parentClass
!=
null
&&
parentClass
.
getShortName
().
equals
(
"R"
);
}
private
static
ClassNode
makeClass
(
RootNode
root
,
String
clsName
,
ResourceStorage
resStorage
)
{
private
static
ClassNode
makeClass
(
RootNode
root
,
String
clsName
,
ResourceStorage
resStorage
)
{
ClassNode
rCls
=
ClassNode
.
addSyntheticClass
(
root
,
clsName
,
AccessFlags
.
PUBLIC
|
AccessFlags
.
FINAL
);
ClassNode
rCls
=
ClassNode
.
addSyntheticClass
(
root
,
clsName
,
AccessFlags
.
PUBLIC
|
AccessFlags
.
FINAL
);
rCls
.
addAttr
(
AType
.
COMMENTS
,
"This class is generated by JADX"
);
rCls
.
addAttr
(
AType
.
COMMENTS
,
"This class is generated by JADX"
);
...
...
jadx-core/src/main/java/jadx/core/xmlgen/XmlGenUtils.java
浏览文件 @
07d7e68d
...
@@ -35,7 +35,7 @@ public class XmlGenUtils {
...
@@ -35,7 +35,7 @@ public class XmlGenUtils {
Set
<
String
>
addedValues
=
new
HashSet
<>();
Set
<
String
>
addedValues
=
new
HashSet
<>();
for
(
ResourceEntry
ri
:
resStorage
.
getResources
())
{
for
(
ResourceEntry
ri
:
resStorage
.
getResources
())
{
if
(
addedValues
.
add
(
ri
.
getTypeName
()
+
'.'
+
ri
.
getKeyName
()))
{
if
(
addedValues
.
add
(
ri
.
getTypeName
()
+
'.'
+
ri
.
getKeyName
()))
{
String
format
=
String
.
format
(
"<public type=\"%s\" name=\"%s\" id=\"
%s
\" />"
,
String
format
=
String
.
format
(
"<public type=\"%s\" name=\"%s\" id=\"
0x%X
\" />"
,
ri
.
getTypeName
(),
ri
.
getKeyName
(),
ri
.
getId
());
ri
.
getTypeName
(),
ri
.
getKeyName
(),
ri
.
getId
());
writer
.
startLine
(
format
);
writer
.
startLine
(
format
);
}
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录