Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Error: Could not find EOCD, after adding "splits" in Android

I am using the following splits code in my gradle to reduce APK size:

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
    }
}

When I run the app, the APK is generated fine, with reduced size and runs on Emulator.

But when I try to build APK file from Build > Build bundles/apks like enter image description here

I get this error:

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

I only wanted to exclude "x86" architectures, to reduce the APK size and need to send the APK to my client. How do I fix this?

like image 785
M. Usman Khan Avatar asked Nov 06 '20 11:11

M. Usman Khan


People also ask

Can't find EOCD react native?

It can be fixed by enabling multidex in your project. Step 3: Go to app/AndroidManifest. xml file if you have declared an application through name attribute , open that class file that extends Application and replace it with MultiDexApplicaation. Now build your application, EOCD error will be fixed.


2 Answers

I was running into a similar issue during my build process, though I wasn't enabling split. Take it for what you will.

After digging through the source kit for PackageAndroidArtifact and other sources in Android, I discovered "EOCD" means "End Of Central Directory". That is, it's related to the end marker of the zip file that gets built when building your output. (The link to the comments in Android's source kit.)

In my own case, I discovered that even though I'm asking Android Studio to do a complete clean of my build directory, it's leaving the app-debug.apk build artifact file. (For reasons, I'm trying to package the debug version of our APK for internal testing.) And somehow that file got corrupted, which completely confuses the build process.

The resolution was to manually delete the apk file prior to running the build process. (In my case, it was found in my build's app/debug directory, next to the app/build directory.)

G'figure...

like image 189
Bill Woody Avatar answered Sep 20 '22 16:09

Bill Woody


May be its late but here is the solution with reason for it to work.

Since we are using splits to create apks for each architecture build system needs a different name for each apk being generated.

Best solution is to provide a dynamic way of generating apk names.

Just go to app level build.gradle file Add rules for release/debug build variants in buildTypes block inside android block like this

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"
                }
            }
        }
    }

Explaination : Here the apk name is appended by the ABI name that helps build system identify the apks for each architectures.

like image 27
Ravikant Tiwari Avatar answered Sep 17 '22 16:09

Ravikant Tiwari