2013-02-06 4 views
1

У меня есть приложение для Android, которое загружает библиотеки для armv6 и armv7a. Когда я запускаю приложение в Samsung SII, он загружает библиотеки для armv6. Samsung SII имеет процессор armv7 neon, он должен загружать библиотеки armv7a. Я тестировал одно и то же приложение в Samsung SIII, и он загружает библиотеки armv7a.Android Samsung SII не загружает библиотеки armv7a

любая идея?

спасибо.

ответ

1

Я подозреваю, что это происходит из ошибки System.loadLibrary(), описанной here.

Чтобы подвести итог, в некоторых версиях Android SDK от Ice Cream Sandwich эта функция (которая должна найти все библиотеки с правильным именем и выбрать тот, который скомпилирован для правильной архитектуры) испорчен, и может выбрать неправильную архитектуру. Я подозреваю, что это то, что происходит с тобой здесь.

Решение, которое мы нашли, - это дать разные имена библиотекам в соответствии с их архитектурой и выбрать себе тот, который вы хотите выбрать. Таким образом, системе не нужно будет устранять неоднозначность между несколькими библиотеками с тем же именем.

Для этого вам сначала необходимо определить, на какой архитектуре вы работаете: это можно сделать либо в собственном коде с использованием cpu-features.h, содержащегося в NDK, либо вы можете разобрать /proc/cpuinfo на Java. После того как вы нашли архитектуру своего устройства, загрузите нужную библиотеку. В псевдокоде это станет следующим:

arch = findArchitecture() // native function 
           // or Java function parsing /cpu/info 
    switch (arch) { 
     case armv7-neon: System.loadLibrary("lib-neon"); 
     case armv6: System.loadLibrary("lib-armv6"); 
     ... 
    } 

Надеюсь, это поможет!

+0

Ссылки не являются ответами. Ожидается, что ответы на SO будут самодостаточными. Пожалуйста, просмотрите этот мета-вопрос (http://meta.stackexchange.com/q/8231/135887). Не могли бы вы обновить свой ответ с кратким резюме ошибки и обходным путем? – Charles

+1

Конечно! просто отредактирован для некоторых подробностей :) – mbrenon

+0

Удивительный, спасибо! – Charles

Смежные вопросы