Я подозреваю, что это происходит из ошибки 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");
...
}
Надеюсь, это поможет!
Ссылки не являются ответами. Ожидается, что ответы на SO будут самодостаточными. Пожалуйста, просмотрите этот мета-вопрос (http://meta.stackexchange.com/q/8231/135887). Не могли бы вы обновить свой ответ с кратким резюме ошибки и обходным путем? – Charles
Конечно! просто отредактирован для некоторых подробностей :) – mbrenon
Удивительный, спасибо! – Charles