如何在预编译的apk中添加其他类

时间:2015-04-02 07:31:44

标签: android class

问题是,我有一个android rom,它有一个我试图移植的应用程序。但是应用程序需要的一些类是在框架内部。我已经在smali中有类(通过smal.-backsmali工具反编译framework.jar中的classes.dex)和java(通过源代码)格式。 但我的问题是,如何在apk中实现/添加它们? 我知道classes.dex中存在类。

我试过以下 - >

1)用apktool反编译apk并添加了类文件(带有smali格式),并在反编译apk后出现的smali文件夹中有相应的路径。 步骤中的问题 - >当我重新编译apk时,不知何故我添加的类在编译apk时不会出现。更清楚地阐述 - > 假设默认情况下,反编译apk的smali文件夹包含X类。我添加了Y类(只需复制反编译的smali文件夹中的Y.smali文件)。但是当我重新编译apk时,重新编译的apk的classes.dex仅包含X类,而Y类仍然缺失。

2)从apk档案中提取classes.dex并使用backsmali获取classout文件夹。然后在其中复制其他所需的类,然后再将其重新打包到classes.dex中。然后我把新的classes.dex放回apk存档(我将" new-classes.dex"重命名为" classes.dex"并用更新的一个替换apk存档中的一个我刚创造了)。 该步骤中的问题 - >它将logcat中的错误表示为 -

E/dalvikvm(2373): Dex cache directory isn't writable: /data/dalvik-cache
I/dalvikvm(2373): Unable to open or create cache for /system/app/Test.apk (/data/dalvik-cache/system@app@Test.apk@classes.dex)
D/AndroidRuntime(2373): Shutting down VM
W/dalvikvm(2373): threadid=1: thread exiting with uncaught exception (group=0x41607ce0)

最后它无法实例化应用程序。

请注意:我在apk上使用apk多工具重新编译时保持零压缩,或者通过winrar手动将classes.dex放入存档中。 另外,我在两种情况下都签了apk。 那么如何将缺少的类添加到apk?应用程序的源代码不是由开发人员提供的。

0 个答案:

没有答案