有没有办法从编译过的.apk中使用Appcelerator创建的代码获取.js文件? 我丢失了一个项目的源代码,现在只有.apk文件,并且不想重写整个代码。 提前谢谢
答案 0 :(得分:2)
取决于Titanium应用程序的构建方式。如果它是一个模拟器构建,那么是的,你可以获得JavaScript文件。如果apk来自设备或dist构建,那么没有。
对于设备和dist构建,Titanium缩小并加密所有JavaScript,然后在编译之前将其注入Java代码。
因此,如果你有一个来自模拟器构建的apk,你可以将.apk重命名为.zip并解压缩,JS文件就在那里。
有一点需要注意的是,如果您的应用是合金应用,那么您将只获得已编译的Alloy代码,而不是原始的Alloy代码。这意味着您将找不到任何.xml视图,.tss样式等。
答案 1 :(得分:1)
如果您想手动执行此操作:
在该应用程序的发行版中,Titanium将所有资产放入名为AssetCryptImpl的Java类中,您必须反编译apk并在源代码中查找该类文件。
AssetCryptImpl文件将包含一个称为initAssetsBytes的私有方法,该方法将以CharBuffer的形式返回一大块数据,其中包含所有资产文件的加密数据。另一种称为initAssets的方法将包含所有原始资产文件名,并且还包含每个资产文件的范围。
资产数据在ECB模式下使用AES加密,资产数据中的最后16个字节是解密密钥。资产解密方法实现在JNI库内部,但不难重写。 filterDataInRange将调用本机代码来解密资源。
您可以通过实现轻松地重写filterDataInRange方法,该方法将获取密钥并解密资源数据并将其写入文件。并编写一个方法,该方法将通过initAssets方法为HashMap中的每个文件名调用readAsset。
如果要一键式解决方案:
您可以使用名为ti_recover的工具。
使用节点包管理器安装它:
npm install ti_recover
比从终端/命令行使用它
ti_recover apkfile.apk outputdir
答案 2 :(得分:-1)
This Website可能是您最好的选择。它使用一系列技术来反编译.apk文件。
答案 3 :(得分:-1)
您可以尝试制作新文件夹并复制要解码的.apk文件。将此.apk文件的扩展名重命名为.zip(例如,从filename.apk重命名为filename.zip)并保存。在执行之后,现在您可以访问classes.dex文件等。另外,在Asset文件夹中,您将获得资源。虽然您无法通过此过程获取.js文件。您可以使用此http://www.javadecompilers.com/apk网站。但它仍然会给你一个java双编译。