Nano Hash - криптовалюты, майнинг, программирование

Может ли ARM64 запускать сборку ARM в режиме совместимости?

Это сторонняя библиотека, и у меня нет доступа к ее исходному коду - просьба к ним собрать для 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-разрядной архитектуре AArch64 ARM .

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


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


  • несмотря на то, что они утверждают, что Android 8.0 (только для ARM64): почему вы думаете, что Android 8.x только 64-битный? 08.09.2018
  • @Marged, потому что нет 32-битных образов QEMU (уровень API 25 — последний); ни обновление Oreo для Nexus 6, который представляет собой Snapdragon 805 (но только для Nexus 6 P, который является Snapdragon 810)... любой пример устройства armv7l, на котором работает Oreo (кроме пользовательского ПЗУ, похожего на SIX)? 08.09.2018
  • Хорошо, но Android 8.x работает и на (физических) 32-битных устройствах. 08.09.2018
  • SIX ROM действительно доказывает, что это возможно, но Google прекратил его поддержку. 08.09.2018

Ответы:


1

Любой процессор 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-разрядных устройствах, которые могут быть выпущены в будущем.

08.09.2018
  • спасибо за объяснение, которое дало мне некоторый намек. когда я вместо этого помещаю библиотеку в armeabi, она жалуется Unable to strip library '...lib/armeabi/somelibrary.so' due to missing strip tool for ABI 'ARMEABI'. Packaging it as is. ... но на самом деле ее можно использовать. 08.09.2018
  • Я думаю, что это предупреждение указывает на то, что вам не хватает некоторых 32-битных инструментов NDK, но я не уверен. 08.09.2018
  • это происходит только с каталогом armeabi (который работает для обеих архитектур), а не с каталогом armeabi-v7a (который явно 32-битный). 08.09.2018
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..