Как отключить загрузку библиотек при запуске эмулятора Android?
Поэтому я начал разрабатывать для Bump, и из-за своей близорукости они не поддерживают устройства / эмуляторы на базе x86 для Android. Только АРМ.
Ну, если оставить в стороне небольшой рынок, это большая проблема для меня, так как мне очень нравится разрабатывать с использованием эмулятора на базе x86 по соображениям производительности.
Итак, (поскольку Bump бессмысленно использовать эмулятор), как я могу отключить загрузку библиотек Bump при работе в эмуляторе?
import com.bump.api.IBumpAPI;
import com.bump.api.BumpAPIIntents;
Ошибка:
08-06 17: 58: 30.895: E / AndroidRuntime (1799): java.lang.UnsatisfiedLinkError: Не удалось загрузить Android-API из загрузчика dalvik.system.PathClassLoader [dexPath = / data / app / com.xxxxxxxx-2. apk, libraryPath = / data / app-lib / com.xxxxxxxxx-2]: findLibrary вернул null 08-06 17: 58: 30.895: E / AndroidRuntime (1799): в java.lang.Runtime.loadLibrary (Runtime.java: 365) 08-06 17:58:30.895: E/AndroidRuntime(1799): на java.lang.System.loadLibrary (System.java:535) 08-06 17:58:30.895: E/AndroidRuntime(1799): на com.bump.api.BumpAPI. (BumpAPI.java:122) 08-06 17:58:30.895: E/AndroidRuntime(1799): на java.lang.Class.newInstanceImpl(собственный метод) 08-06 17:58: 30.895: E / AndroidRuntime (1799): на java.lang.Class.newInstance(Class.java:1319)
3 ответа
Хотя это несколько сложно, вы можете достичь этого, разделив ваш проект на несколько связанных проектов с помощью проекта библиотеки Android. В настоящее время у вас, вероятно, есть что-то подобное
- Основной проект - включает в себя весь код, библиотеки Bump и т. Д. Это то, что вы запускаете на устройствах
Вам нужно будет разделить ваше приложение на 3 отдельных проекта:
Библиотечный проект - включает в себя почти весь код в исходном основном проекте, за исключением библиотеки bump и связанного кода.
Проект устройства - это будет зависеть от проекта библиотеки и добавляет библиотеку bump и связанные с ней действия. Это то, что вы запускаете на устройствах.
Проект эмулятора - это будет зависеть от проекта библиотеки. Библиотека удара и действия не включены. Это то, что вы запускаете в эмуляторе.
Теория такая же, как наличие платной и бесплатной версии вашего приложения. За исключением того, что вместо платных и бесплатных, у вас есть неровности и неровности.
Почему бы не создать пользовательскую библиотеку в C с использованием JNI, чтобы удовлетворить зависимость от ссылок, и использовать ее в своем проекте, ориентированном на эмулятор?
Это похоже на создание псевдооболочки или прокладки - например: функция в Java называется fooBar
которая используется реальной библиотекой, нацеленной на ARM, может иметь параметры и т. д. и что-то возвращает. В псевдоисторической библиотеке создайте fooBar
, используя те же параметры и возвращая ноль или фиктивный объект, нацеливаясь на эмулятор.
Это может звучать ужасно неловко, учитывая API и параметры, имена функций и т. Д., Что очень важно. Просто чтобы знать, что при переходе по этому маршруту задача будет зависеть от того, насколько большой API используется и управляется библиотекой Bump, я говорю о нативном .so
скомпилированная версия ARM.
Единственный способ состоит в том, чтобы временно удалить библиотеки Bump и код, связанный с Bump, из вашего приложения при работе на эмуляторе или создать дублирующее приложение, в котором удален Bump (специально для работы на x86). Даже если бы вы смогли отключить Bump библиотеки, Android все равно будет пытаться выполнить любой код, который использует эти библиотеки, такие как import com.bump.api.IBumpAPI;
что приведет к аварии в любом случае =(