Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 10410fc8 authored by Anthony Mazzola's avatar Anthony Mazzola Committed by Kenny Root
Browse files

Fix issue with selecting proper JNI libraries

Current code will load both abi and abi2 versions of the JNI libraries.
The second one found will be the library in use. Update algorithm so
that abi2 libraries will never be loaded once we find a library that
supports the primary abi. This is consistent with the original
implementation.

Bug: 5787224
Change-Id: Ib4d30bea8316ca9bf62757c970dcc5b75cd969ec
parent c892e177
Loading
Loading
Loading
Loading
+14 −2
Original line number Diff line number Diff line
@@ -283,6 +283,7 @@ iterateOverNativeFiles(JNIEnv *env, jstring javaFilePath, jstring javaCpuAbi, js
    const int N = zipFile.getNumEntries();

    char fileName[PATH_MAX];
    bool hasPrimaryAbi = false;

    for (int i = 0; i < N; i++) {
        const ZipEntryRO entry = zipFile.findEntryByIndex(i);
@@ -318,11 +319,22 @@ iterateOverNativeFiles(JNIEnv *env, jstring javaFilePath, jstring javaCpuAbi, js
        if (cpuAbi.size() == cpuAbiRegionSize
                && *(cpuAbiOffset + cpuAbi.size()) == '/'
                && !strncmp(cpuAbiOffset, cpuAbi.c_str(), cpuAbiRegionSize)) {
            LOGV("Using ABI %s\n", cpuAbi.c_str());
            LOGV("Using primary ABI %s\n", cpuAbi.c_str());
            hasPrimaryAbi = true;
        } else if (cpuAbi2.size() == cpuAbiRegionSize
                && *(cpuAbiOffset + cpuAbi2.size()) == '/'
                && !strncmp(cpuAbiOffset, cpuAbi2.c_str(), cpuAbiRegionSize)) {
            LOGV("Using ABI %s\n", cpuAbi2.c_str());

            /*
             * If this library matches both the primary and secondary ABIs,
             * only use the primary ABI.
             */
            if (hasPrimaryAbi) {
                LOGV("Already saw primary ABI, skipping secondary ABI %s\n", cpuAbi2.c_str());
                continue;
            } else {
                LOGV("Using secondary ABI %s\n", cpuAbi2.c_str());
            }
        } else {
            LOGV("abi didn't match anything: %s (end at %zd)\n", cpuAbiOffset, cpuAbiRegionSize);
            continue;