#Dexer
A useful library provides some operations doing on .dex file
#Download
Please use JitPack.
```groovy
allprojects {
repositories {
...
maven { url "https://jitpack.io" }
}
}
```
```groovy
compile 'com.github.zjutkz:Dexer:1.3'
```
#Usage
#####You should decode the .dex file first.Just construct the Dexer class
```java
public void decode_dex(View view){
try {
byte[] src = stream2byte(getAssets().open("classes.dex"));
dexer = new Dexer(src);
} catch (IOException e) {
e.printStackTrace();
}
}
```
```java
public Dexer(File file){
this(file.getAbsolutePath());
}
public Dexer(String dexPath){
this(FileUtil.getBytes(dexPath));
}
public Dexer(byte[] src){
initThread();
decodeDex(src);
}
```
#####There are 6 functions support here:
1.Getting all classes in .dex file:
```java
public void get_all_classes(View view){
dexer.getAllClasses(new Dexer.OnFetchDataListener<List<Class>>() {
@Override
public void onFetchDataSuccess(List<Class> data) {
for(Class clz : data){
Log.d(TAG, clz.source_file_name);
}
}
});
}
```
2.Getting all methods in .dex file:
```java
public void get_all_methods(View view){
dexer.getAllMethods(new Dexer.OnFetchDataListener<List<Method>>() {
@Override
public void onFetchDataSuccess(List<Method> data) {
for(Method method : data){
Log.d(TAG, method.name);
}
}
});
}
```
3.Getting all methods in a specific class:
```java
public void get_all_methods_in_class(View view){
dexer.getAllMethodsInClass("MainActivity",new Dexer.OnFetchDataListener() {
@Override
public void onFetchDataSuccess(Object data) {
List<Method> allMethods = (List<Method>)data;
for(Method method : allMethods){
Log.d(TAG, method.name);
}
}
});
}
```
4.Judging if this .dex file has a particular class or method:
```java
public void has_method_and_class(View view){
dexer.hasClass("MainActivity", new Dexer.OnFetchDataListener<Boolean>() {
@Override
public void onFetchDataSuccess(Boolean data) {
Log.d(TAG, "dex file has MainActivity: " + (boolean)data);
}
});
dexer.hasClass("MainActivity2", new Dexer.OnFetchDataListener<Boolean>() {
@Override
public void onFetchDataSuccess(Boolean data) {
Log.d(TAG, "dex file has MainActivity2: " + data);
}
});
dexer.hasMethods("MainActivity", "get_all_methods_in_class", new Dexer.OnFetchDataListener<Boolean>() {
@Override
public void onFetchDataSuccess(Boolean data) {
Log.d(TAG, "MainActivity has method get_all_methods_in_class: " + data);
}
});
dexer.hasMethods("MainActivity", "get_all_methods_in_class2", new Dexer.OnFetchDataListener<Boolean>() {
@Override
public void onFetchDataSuccess(Boolean data) {
Log.d(TAG, "MainActivity has method get_all_methods_in_class2: " + data);
}
});
}
```
5.Getting a specific class(support inner class):
```java
public void get_class(View view){
dexer.getClass("TestClass", new Dexer.OnFetchDataListener<Class>() {
@Override
public void onFetchDataSuccess(Class data) {
Log.d(TAG, data.class_name + " " + data.super_class_name);
for(Field field : data.instance_fields){
Log.d(TAG, "instance field: " + field.name + " " + field.access_flag);
}
for(Field field : data.static_fields){
Log.d(TAG, "static field: " + field.name + " " + field.access_flag);
}
Log.d(TAG, "" + data.access_flags);
Log.d(TAG, "=========================================");
}
});
dexer.getClass("TestClass$InnerClass", new Dexer.OnFetchDataListener<Class>() {
@Override
public void onFetchDataSuccess(Class data) {
for(Field field : data.instance_fields){
Log.d(TAG, "instance field: " + field.name);
}
for(Field field : data.static_fields){
Log.d(TAG, "static field: " + field.name);
}
Log.d(TAG, "" + data.access_flags);
Log.d(TAG, "=========================================");
}
});
dexer.getClass("TestClass$InnerClass$DoubleInnerClass", new Dexer.OnFetchDataListener<Class>() {
@Override
public void onFetchDataSuccess(Class data) {
for(Field field : data.instance_fields){
Log.d(TAG, "instance field: " + field.name);
}
for(Field field : data.static_fields){
Log.d(TAG, "static field: " + field.name);
}
Log.d(TAG, "" + data.access_flags);
Log.d(TAG, "=========================================");
}
});
}
```
6.Getting a specific method:
```java
public void get_method(View view){
dexer.getMethod("MainActivity", "onCreate", new Dexer.OnFetchDataListener<Method>() {
@Override
public void onFetchDataSuccess(Method data) {
Log.d(TAG, data.name);
Log.d(TAG, "" + data.access_flag);
Log.d(TAG, data.returnType);
for(String type : data.paramTypes){
Log.d(TAG, type);
}
for(Annotation annotation : data.methodAnnotations){
Log.d(TAG, annotation.name);
for(AnnotationElement element : annotation.elements){
Log.d(TAG, element.name + ": " + element.value);
}
}
}
});
}
```
7.Dumpping the dex:
7.1 In logcat
```java
public void dump(View view){
dexer.dumpDex();
}
```
7.2 In file
```java
public void dump(View view){
dexer.dumpDex("storage/sdcard0/dump.txt");
}
```
8.Getting methods & classes count:
```java
public void get_count(View view){
dexer.getClassCount(new Dexer.OnFetchDataListener<Integer>() {
@Override
public void onFetchDataSuccess(Integer data) {
Log.d(TAG, "classes count: " + data);
}
});
dexer.getMethodCount(new Dexer.OnFetchDataListener<Integer>() {
@Override
public void onFetchDataSuccess(Integer data) {
Log.d(TAG, "methods count: " + data);
}
});
}
```
#Todo
######1.Support the code item
######2.Support array-type annotation value
#Thanks
[dex2jar](https://github.com/pxb1988/dex2jar)
#License
```
Copyright 2016 zjutkz
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
```
没有合适的资源?快使用搜索试试~ 我知道了~
Android代码-一个轻量级的dex解析器
共54个文件
java:24个
xml:9个
png:5个
需积分: 46 4 下载量 159 浏览量
2019-08-06
16:48:25
上传
评论
收藏 816KB ZIP 举报
温馨提示
Dexer A useful library provides some operations doing on .dex file Download Please use JitPack. allprojects { repositories { ... maven { url "https://jitpack.io" } } } compile 'com.github.zjutkz:Dexer:1.3' Usage You should decode the .dex file first.Just construct the Dexer class public void decode_dex(View view){ try { byte[] src = stream2byte(getAssets().open("classes.dex")); dexer = new Dexer(src); } catch (IOException e) { e.printStackT
资源详情
资源评论
资源推荐
收起资源包目录
Android代码-一个轻量级的dex解析器.zip (54个子文件)
Dexer-master
.gitignore 66B
sample
.gitignore 7B
build.gradle 653B
src
androidTest
java
com
zjutkz
sample
ApplicationTest.java 348B
main
AndroidManifest.xml 785B
res
mipmap-xhdpi
ic_launcher.png 5KB
mipmap-mdpi
ic_launcher.png 2KB
layout
activity_main.xml 2KB
values-w820dp
dimens.xml 358B
mipmap-xxhdpi
ic_launcher.png 8KB
mipmap-hdpi
ic_launcher.png 3KB
mipmap-xxxhdpi
ic_launcher.png 10KB
values
strings.xml 69B
colors.xml 208B
dimens.xml 211B
styles.xml 383B
assets
classes.dex 2.16MB
java
com
zjutkz
sample
MainActivity.java 7KB
TestAnnotation.java 482B
TestClass.java 1KB
test
java
com
zjutkz
sample
ExampleUnitTest.java 310B
proguard-rules.pro 665B
settings.gradle 31B
build.gradle 498B
gradlew 5KB
LICENSE.txt 11KB
README.md 7KB
gradlew.bat 2KB
dexerlib
.gitignore 7B
build.gradle 574B
src
androidTest
java
com
zjutkz
dexerlib
ApplicationTest.java 350B
main
AndroidManifest.xml 247B
res
values
strings.xml 71B
java
com
zjutkz
dexerlib
dex
AnnotationElement.java 906B
EncodedCatchHandlerList.java 298B
Method.java 3KB
TryItem.java 186B
AccessFlag.java 2KB
Class.java 3KB
EncodedTypeAddPair.java 161B
Code.java 394B
Field.java 1KB
Annotation.java 960B
thread
DecodeThread.java 867B
util
UTF8.java 3KB
FileUtil.java 965B
task
DecodeTask.java 24KB
Task.java 125B
DefaultTask.java 315B
Dexer.java 6KB
test
java
com
zjutkz
dexerlib
ExampleUnitTest.java 312B
proguard-rules.pro 665B
gradle
wrapper
gradle-wrapper.properties 233B
gradle-wrapper.jar 52KB
共 54 条
- 1
weixin_39840588
- 粉丝: 448
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0