错误:在 Android 中添加“splits”后找不到 EOCD

问题描述 投票:0回答:4

我在 gradle 中使用以下拆分代码来减小 APK 大小:

splits {
        abi {
            // Enable ABI split

        enable true

        // Clear list of ABIs
        reset()

        // Specify each architecture currently supported by the Video SDK
        include "armeabi-v7a", "arm64-v8a", "x86", "x86_64"

        // Specify that we do not want an additional universal SDK
        universalApk false
    }
}

当我运行应用程序时,APK 生成良好,尺寸减小并在模拟器上运行。

但是当我尝试从“构建”>“构建捆绑包/apk”构建 APK 文件时,例如 enter image description here

我收到此错误:

Execution failed for task ':app:packageAbcDebug'.
> A failure occurred while executing com.android.build.gradle.tasks.PackageAndroidArtifact$IncrementalSplitterRunnable
   > Could not find EOCD in '....apk'

Possible solution:
 - Declare repository providing the artifact, see the documentation at https://docs.gradle.org/current/userguide/declaring_repositories.html

我只想排除“x86”架构,以减少 APK 大小并需要将 APK 发送给我的客户。我该如何解决这个问题?

android split architecture
4个回答
5
投票

我在构建过程中遇到了类似的问题,尽管我没有启用拆分。你想怎样就怎样吧。

在深入研究 PackageAndroidArtifact 的源代码包和 Android 中的其他源代码后,我发现“EOCD”意味着“中央目录结束”。也就是说,它与构建输出时构建的 zip 文件的结束标记相关。 (Android 源工具包中注释的链接。)

就我自己而言,我发现即使我要求 Android Studio 彻底清理我的构建目录,它也会留下 app-debug.apk 构建工件文件。 (出于某种原因,我正在尝试打包 APK 的调试版本以进行内部测试。)不知何故该文件已损坏,这完全混淆了构建过程。

解决方案是在运行构建过程之前手动删除 apk 文件。 (就我而言,它位于我的构建的 app/debug 目录中,位于 app/build 目录旁边。)

G'图...


4
投票

可能已经晚了,但这是解决方案及其起作用的理由。

由于我们使用拆分为每个架构创建 apk,因此构建系统需要为每个生成的 apk 使用不同的名称。

最好的解决方案是提供动态生成 apk 名称的方法。

只需转到应用程序级别的 build.gradle 文件 在 android 块内的 buildTypes 块中添加发布/调试构建变体的规则,如下所示

buildTypes {
        release {
            minifyEnabled true
            shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            applicationVariants.all { variant ->
                variant.outputs.all { output ->
                    project.ext { appName = 'YourApkName' }
                    outputFileName = "${appName}-${output.getFilter(OutputFile.ABI)}-${variant.name}-${variant.versionName}.apk"
                }
            }
        }
    }

说明: 这里的 apk 名称附加了 ABI 名称,有助于构建系统识别每个架构的 apk。


0
投票

如果您开发 flutter 应用程序,您应该打开终端并输入:

flutter clean && flutter pub get

-1
投票

您还可以使用 Android Size Analytics 来识别大小并减小 apk 大小。

为了了解哪些文件实际上在应用程序中占用了更多空间,请使用 Android Studio 中的 Android Size Analyzer 插件。用于安装插件

选择“文件”>“设置”(或在 Mac 上,选择“Android Studio”>“首选项”。) 选择左侧面板中的插件部分。 单击市场选项卡。 搜索“Android Size Analyzer”插件。 单击分析器插件的安装按钮。

enter image description here

安装插件后重新启动IDE。现在,要分析应用程序,请从菜单栏转到“分析”>“分析应用程序大小”。

© www.soinside.com 2019 - 2024. All rights reserved.