Android Q выполнить двоичный файл при сборке релиза - PullRequest
0 голосов
/ 04 марта 2020
public String getBinaryFileName(Context context) {
    String[] abis = Build.SUPPORTED_ABIS;
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q)
        // this part is working fine for pre-q android
        return name;
    else
         //Android Q does not allow executing files outside lib folder
         for (String abi : abis) {
            String name = context.getApplicationInfo().nativeLibraryDir + "/binary" + "." + abi + ".so";
            File executable = new File(name);
            if (executable.exists())
               return name;
         }
    return null;
}

У меня есть этот код, который пытается получить имя исполняемого двоичного файла в ordre, чтобы выполнить его позже. Код работает нормально для устройств до Q Android, а также отлично работает при выполнении в режиме отладки на устройствах Android Q, но возвращает null при выполнении в режиме выпуска.

Я добавил кое-что к этому, и кажется, что файл не существует в nativeLibraryDir в режиме выпуска.

Я не очень хорош, когда дело доходит до нативных вещей, и я действительно не могу понять, что здесь происходит.

Попытался установить android:extractNativeLibs в манифесте либо на значения true, либо на false Я также попытался android.bundle.enableUncompressedNativeLibs=false в файле gradle.propreties, как некоторые предлагали

Но НИЧЕГО! Пожалуйста, помогите.

1 Ответ

0 голосов
/ 04 марта 2020

По счастливой случайности я обнаружил, что мне нужно добавить lib в начало имени файла:

String name = context.getApplicationInfo().nativeLibraryDir + "/libbinary" + "." + abi + ".so";

Понятия не имею почему!

...