繁体   English   中英

使用 Adobe AIR 重新打包 APK

[英]Repackage APK with Adobe AIR

Flash 制作的 Android 游戏是使用 Adobe AIR 打包的,但它不再适用于 Android 版本 7 以上的游戏。我想知道是否可以使用HARMAN重新打包这个游戏?

我已经下载了HARMAN 的 Adobe AIR并尝试使用ADT package 命令重新打包应用程序。 我使用了 APK 的assets/META-INF/AIR/文件夹中的application.xml文件。 但是,此应用程序使用扩展名,并且似乎 ADT 需要 ANE(AIR 本机扩展名)文件,还是有其他方法?

我在网上找不到 ANE 文件。 但是一些中国黑客能够重新打包该应用程序,在 Android 10 工作,文件夹assets/META-INF/AIR/extensions文件夹与原始 apk 相比没有变化。 然而,文件夹lib/armeabi-v7a中的文件已更新,并包含一个名为libX86Bridge.so的新文件。

原始应用程序使用的扩展是:

  • com.adobe.ane.social
  • com.milkmangames.extensions.AndroidIAB
  • com.chartboost.plugin.air
  • com.milkmangames.extensions.CoreMobile
  • com.jirbo.airadc.AirAdColony
  • com.milkmangames.extensions.GoViral

所以我终于能够重新打包 APK,它适用于最近的 Android 版本!

首先,我用归档管理器打开了APK文件(APK是ZIP文件),然后使用dex2jar工具将APK里面的classes.dex文件转换成JAR文件。 JAR 文件(也是一个 ZIP 文件)内部是应用程序使用的 AIR Native Extensions 中已编译的 Java 类。

然后,在HARMAN 的 Adobe AIRbin目录中,我为每个扩展创建了一个目录:

AIRSDK_Windows\bin
├── com.adobe.ane.social
├── com.milkmangames.extensions.AndroidIAB
├── com.chartboost.plugin.air
├── com.milkmangames.extensions.CoreMobile
├── com.jirbo.airadc.AirAdColony
├── com.milkmangames.extensions.GoViral

解压后的扩展 ANE 可以在 APK 中的路径/assets/META-INF/AIR/extensions/中找到。

For each extension, added catalog.xml and library.swf into a ZIP file, and renamed the ZIP extension to SWC (eg: com.adobe.ane.social.swc ). 然后,将 SWC 文件放在相应扩展的目录中。

在 APK 中每个扩展的目录中,都有一个路径META-INF/ANE/ ,其中可以找到文件extension.xml和其他文件(例如: /assets/META-INF/AIR/extensions/com.adobe.ane.social/META-INF/ANE/ )。 我将这些目录中的所有文件放在我在bin目录中创建的各个扩展的目录中。 例如,对于com.chartboost.plugin.air扩展,目录结构如下所示:

AIRSDK_Windows\bin
├── com.adobe.ane.social
├── com.milkmangames.extensions.AndroidIAB
├── com.chartboost.plugin.air
│   ├── com.chartboost.plugin.air.swc
│   ├── extension.xml
│   ├── Android-ARM
├── com.milkmangames.extensions.CoreMobile
├── com.jirbo.airadc.AirAdColony
├── com.milkmangames.extensions.GoViral

我打开了extension.xml文件,这些是它的内容:

<extension xmlns="http://ns.adobe.com/air/extension/16.0">
    <id>com.chartboost.plugin.air</id>
    <versionNumber>5.5.0</versionNumber>
    <platforms>
        <platform name="Android-ARM">
            <applicationDeployment>
                <nativeLibrary>libChartboostAir.jar</nativeLibrary>
                <initializer>com.chartboost.plugin.air.ChartboostExtension</initializer>
                <finalizer>com.chartboost.plugin.air.ChartboostExtension</finalizer>
            </applicationDeployment>
        </platform>
        
        <platform name="iPhone-ARM">
            <applicationDeployment>
                <nativeLibrary>libChartboostAir.a</nativeLibrary>
                <initializer>ChartboostExtInitializer</initializer>
                <finalizer>ChartboostExtFinalizer</finalizer>
            </applicationDeployment>
        </platform>
        
        <platform name="default">
            <applicationDeployment/>
        </platform>
        
    </platforms>
</extension>

由于我没有为iPhone-ARM打包游戏,也没有libChartboostAir.a文件,因此我使用 XML 评论<!-- -->评论了该platform块。

我们可以看到有一个default平台(我注意到所有扩展都有一个)。 因此,我为default平台创建了一个目录,并将library.swfAndroid-ARM目录复制到该目录。 然后将两个目录都放在一个platform目录中。 目录结构现在如下所示:

AIRSDK_Windows\bin
├── com.adobe.ane.social
├── com.milkmangames.extensions.AndroidIAB
├── com.chartboost.plugin.air
│   ├── com.chartboost.plugin.air.swc
│   ├── extension.xml
│   ├── platform
│   │   ├── Android-ARM
│   │   │   ├── library.swf
│   │   │   ├── <other bunch of files>
│   │   ├── default
│   │   │   ├── library.swf
├── com.milkmangames.extensions.CoreMobile
├── com.jirbo.airadc.AirAdColony
├── com.milkmangames.extensions.GoViral

Then, from the JAR file that we got at the beginning (converted from classes.dex ), I got all the classes related to com.chartboost.plugin.air and placed them in a ZIP archive named libChartboostAir.jar . 然后我将libChartboostAir.jar放在Android-ARM目录中。

最后,对于这个扩展,我运行了以下命令来生成 ANE 文件:

..\adt.bat -package -target ane com.chartboost.plugin.air.ane extension.xml -swc com.chartboost.plugin.air.swc -platform Android-ARM -C platform/Android-ARM . -platform default -C platform/default library.swf

我按照上述步骤为其他扩展生成了 ANE 文件。 最后,JAR 文件(从classes.dex生成)中有一些类我没有从任何扩展名放入 JAR 文件中,因为我不知道它们属于哪里。 所以,我只是将它们放在随机扩展的 JAR 文件中。 这不是问题,因为重要的是所有类最终都被放置在新的classes.dex文件中,使用与原始文件相同的目录结构。

编译完所有 ANE 文件后,我在bin目录中为要重新打包的应用程序创建了一个目录。

在原始 APK 的assets目录中,有应用的 SWF 文件和包含应用图标的_Pic_Gen目录。 我将它们都放在我刚刚创建的目录中。 在原始 APK 的/assets/META-INF/AIR/目录中有一个application.xml文件和一个extensions目录(带有解压的 ANE)。 我将application.xml文件放在我为bin目录中的应用程序创建的目录中。 在这个目录中,我还创建了一个extensions目录,并将编译好的 ANE 文件放在里面。 所以,这个应用程序的目录结构现在看起来像这样:

AIRSDK_Windows\bin
├── MyApp
│   ├── application.xml
│   ├── _Pic_Gen
│   ├── MyApp.swf
│   ├── extensions
│   │   ├── com.adobe.ane.social.ane
│   │   ├── com.milkmangames.extensions.AndroidIAB.ane
│   │   ├── com.chartboost.plugin.air.ane
│   │   ├── com.milkmangames.extensions.CoreMobile.ane
│   │   ├── com.jirbo.airadc.AirAdColony.ane
│   │   └── com.milkmangames.extensions.GoViral.ane

我将application.xml里面的manifest中的targetSdkVersion改为30,以支持Android 11(目前是最新的)。 Android版本与SDK相关: https://developer.ZC31B32364CE19CA8FCD150A417releaseEC/platformCA8FCD150A417releaseEC.com

我还将<application xmlns="http://ns.adobe.com/air/application/17.0">更改为<application xmlns="http://ns.adobe.com/air/application/33.1"> ,所以它使用最新的 Flash 播放器版本(33.1 来自 HARMAN)。

然后,我使用 OpenSSL 创建了一个自签名证书(为此我使用了 Linux):

openssl req -newkey rsa:2048 -x509 -keyout cakey.pem -out cacert.pem -days 10000
# entered my password
openssl pkcs12 -export -in cacert.pem -inkey cakey.pem -out myapp.p12

最后,我可以使用 package 新 APK,使用:

..\adt.bat -package -target apk -storetype pkcs12 -keystore myapp.p12 MyApp.apk application.xml -extdir extensions MyApp.swf _Pic_Gen
# entered certificate's password

编辑 2021-05-19

但是,对于 Android 11,APK 现在必须使用 APK 签名方案 v2 或更高版本进行签名(请参阅: https://stackoverflow.com/a/66041713/3049315 )。 使用apksigner (在 Android SDK 中可用),您可以执行以下操作:

C:\Users\<user>\AppData\Local\Android\Sdk\build-tools\<version>\apksigner.bat sign -v --out MyApp_v2signed.apk --ks myapp.p12 MyApp.apk

然后生成了 APK,我可以在最近的 Android 版本上玩游戏。

编辑 2021-06-25

显然,在某些设备上,打开 APK 时会出现错误,提示“解析此包时出现问题”。

使用 Android Studio 分析 APK 时出现的错误是: INSTALL_PARSE_FAILED_RESOURCES_ARSC_COMPRESSED

然后我在 AIR SDK 中遇到了这个问题 打开AIRSDK_Windows\lib\adt.cfg向我显示了注释行: #UncompressedExtensions=emd,tfl,tflite,pb我取消了它的注释并添加了arsc扩展名,这是 Android Studio 抱怨的文件 resources.arsc 的扩展名关于。 这解决了使用新配置重新打包 APK 后的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM