15 java xml android android-layout android-activity
我知道如何使用基于Windows的系统将apk文件解压缩到类中,如下所示:
第1步:重命名.apk文件
使用扩展名.zip重命名.apk文件(例如,让文件为"demofile.apk",然后在重命名后变为"demofile.apk.zip")
第2步:从apk获取java文件
现在解压缩特定文件夹中的重命名的zip文件,例如,让该文件夹为"demofolder".现在从windows的链接下载dex2jar并将该zip文件解压缩到"demofolder"文件夹中.
现在打开命令提示符并转到上一步创建的文件夹并输入命令"dex2jar classes.dex"并按Enter键.这将在同一文件夹中生成"classes.dex.dex2jar"文件.
现在从链接下载java反编译器并解压缩并启动(双击)jd-gui.exe
从jd-gui窗口浏览demofolder中生成的"classes.dex.dex2jar"文件,这将通过src名称给出所有类文件.
现在从File菜单中选择"save all sources",这将生成一个名为"classes_dex2jar.src.zip"的zip文件,其中包含所有包和java文件.
解压缩该zip文件(classes_dex2jar.src.zip),您将获得该应用程序的所有java文件.
以上步骤将生成java文件,但要获取xml文件执行以下步骤.
第3步:从apk获取xml文件
从链接下载apktool和apktool安装并解压缩两个文件并将其放在同一个文件夹中(例如"demoxmlfolder").
将.apk文件放在同一个文件夹中(即demoxmlfolder)
现在打开命令提示符并转到存储apktool的目录(这里是"demoxmlfolder")并输入命令"apktool if framework-res.apk"上面的命令应该导致"Framework installed ..."现在在命令提示符下键入命令"apktool d filename.apk"(其中filename是apk文件的名称)这将在当前目录(此处为demoxmlfolder)中生成名称filename的文件夹,其中所有xml文件将存储在res\layout文件夹中.
但我想知道如何在Android中以编程方式完成上述操作.所以我的android应用程序可以简单地提取另一个应用程序的dex文件.我不介意dex文件是否被复制到手机上的其他地方,然后反编译(这只是我坚持的反编译)
根据以下原则,我可以访问每个应用程序的dex,而不知道如何在Android中对其进行反编译.
任何帮助都会很棒.
final PackageManager pm = getPackageManager();
PackageInfo packageInfo = null;
try {
packageInfo = pm.getPackageInfo("PACKAGE NAME HERE", PackageManager.GET_META_DATA);
} catch (NameNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
File file = new File(packageInfo.applicationInfo.sourceDir);
Uri uri = Uri.fromFile(file);
Run Code Online (Sandbox Code Playgroud)
您可以在此处浏览ShowJava应用程序的源代码.看起来他正在使用Dex2Jar工具.反编译在BackgroundService中开始,所有魔法都发生在一些特殊的Jar类中.我不知道这段代码是来自一个库,还是所有这些代码都是由他创建的.看看ExtractJar和DecompileJar方法,不应该很难理解发生了什么.