Может ли ARM64 запускать сборку ARM в режиме совместимости? - PullRequest
0 голосов
/ 08 сентября 2018

Это сторонняя библиотека, и у меня нет доступа к ее исходному коду - просьба их собрать для ARM64 пока не дала никакого эффекта, несмотря на то, что они утверждают, что Android 8.0 (который является только ARM64) будет "поддерживаться".

Следующий код Java работает на armv7l, но не на aarch64:

static {
    switch(System.getProperty("os.arch")){
        case "aarch64":
        case "armv7l":
            try {
               System.loadLibrary("somelibrary");
            } catch(UnsatisfiedLinkError e) {
                Log.e(LOG_TAG, e.getMessage());
            }
            break;
    }
}

Ошибка dlopen: "/ data / app / ... /base.apk!/lib/arm64-v8a/somelibrary.so" является 32-разрядной вместо 64-разрядной.

Кажется, что выполнение AArch32 будет "необязательным" (и, возможно, даже недоступным), потому что (скорее всего) придется переключить ЦП с AArch64 на AArch32 выполнение. например. Это слайд-шоу охватывает тему: Linux на 64-разрядной архитектуре ARrch64 ARM .

В: Есть ли способ использовать 32-битную библиотеку на 64-битном устройстве Android?


Как оказалось, это не принимается Google Play - при условии, что требуется родная сборка ARM64.

1 Ответ

0 голосов
/ 08 сентября 2018

Любой процессор arm64, который вы найдете в смартфоне, также должен иметь возможность запускать код arm32.

Однако необходимо выполнить как минимум три требования:

  1. Ваш процесс не может смешивать 64-битный и 32-битный код - он должен быть одним или другим.
  2. Ваша операционная система (или вы) должны предоставлять 32-разрядные версии всех динамических библиотек, на которые вы ссылаетесь.
  3. Ядро вашей ОС должно иметь поддержку 32-битных процессов; он будет отвечать за переключение режима выполнения, пока ваш процесс использует ЦП.

Номер 3 в порядке; Android использует Linux-подобное ядро, которое поддерживает процессы arm32 на arm64.

Номер 2 , вероятно, в порядке; Я не знаю, откуда вы узнали, что Android 8.0 только 64-битный, но это не так. Производитель устройства может исключить 32-разрядную поддержку, но я не знаю, что из этого получится (потому что это предотвратит запуск на их устройствах устаревших 32-разрядных приложений и игр).

Конечно, поставка 32-битных и 64-битных библиотек на телефонах означает, что ОС занимает больше места для хранения, поэтому вполне возможно, что в будущем появятся только 64-битные устройства. Никакие 32-битные игры или приложения не будут работать на этих устройствах.

Ваша проблема с номером 1: ваше приложение работает как 64-битный процесс и пытается загрузить 32-битную библиотеку. Это не будет работать.

Решением будет сделать ваше приложение 32-битным. Однако если вы можете избежать всего этого, я бы порекомендовал против этого (т.е. не используйте эту библиотеку). Ваше приложение не будет работать на любых 64-битных устройствах, которые могут быть выпущены в будущем.

...