Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
DarkVortex
102 / 68 / 18
Регистрация: 07.07.2014
Сообщений: 239
#1

DexClassLoader не работает - Программирование Android

24.12.2015, 17:30. Просмотров 321. Ответов 0
Метки нет (Все метки)

Добрый день. Возникла проблема с использованием DexClassLoader. Тестирование приложения на эмуляторах и на моих устройствах проходит без проблем, но обнаружил, что примерно на 30% устройств возникает проблема. Для загрузки класса из .dex (который упакован в apk) использую следующий код:
Java
1
2
3
4
5
6
7
PRIVATE_CACHE = context.getCacheDir().getAbsolutePath();
DexLoader = new  DexClassLoader(PRIVATE_CACHE + "/DEX_API.apk", PRIVATE_CACHE, PRIVATE_CACHE, ClassLoader.getSystemClassLoader());
try {
    DexLoader.loadClass("com.class");
} catch (Exception e) {
    Log.d("TAG", getStackTrace(e));
}
От устройств где это не работает получаю 2 вида ошибок:
java.lang.ClassNotFoundException: Didn't find class "class_name" on path: DexPathList[[zip file "/data/data/packagename/cache/DEX_API.apk"],nativeLibraryDirectories=[/data/data/packagename/cache, /system/lib]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
at java.lang.ClassLoader.loadClass(ClassLoader.java:497)
at java.lang.ClassLoader.loadClass(ClassLoader.java:457)
at com.API1.Reflector.loadClass(Reflector.java:43)
at com.API1.RaccoonBroadcast.onReceive(RaccoonBroadcast.java:65)
at android.app.ActivityThread.handleReceiver(ActivityThread.java:2528)
at android.app.ActivityThread.access$1700(ActivityThread.java:151)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1319)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5372)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:970)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:786)
at dalvik.system.NativeStart.main(Native Method)
Suppressed: java.io.IOException: unable to open DEX file
at dalvik.system.DexFile.openDexFileNative(Native Method)
at dalvik.system.DexFile.openDexFile(DexFile.java:296)
at dalvik.system.DexFile.<init>(DexFile.java:111)
at dalvik.system.DexFile.loadDex(DexFile.java:151)
at dalvik.system.DexPathList.loadDexFile(DexPathList.java:266)
at dalvik.system.DexPathList.makeDexElements(DexPathList.java:230)
at dalvik.system.DexPathList.<init>(DexPathList.java:112)
at dalvik.system.BaseDexClassLoader.<init>(BaseDexClassLoader.java:48)
at dalvik.system.DexClassLoader.<init>(DexClassLoader.java:57)
at com.API1.Reflector.<init>(Reflector.java:36)
at com.API1.Reflector.getInstance(Reflector.java:49)
at com.API1.API1Service.onStartCommand(API1Service.java:52)
at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2823)
at android.app.ActivityThread.access$2100(ActivityThread.java:151)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1340)
... 8 more
или

java.lang.ClassNotFoundException: class_name in loader dalvik.system.DexClassLoader@40566f48
at dalvik.system.DexClassLoader.findClass(DexClassLoader.java:235)
at java.lang.ClassLoader.loadClass(ClassLoader.java:551)
at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
at com.API1.Reflector.loadClass(Reflector.java:43)
at com.API1.RaccoonBroadcast.onReceive(RaccoonBroadcast.java:65)
at android.app.ActivityThread.handleReceiver(ActivityThread.java:1813)
at android.app.ActivityThread.access$2400(ActivityThread.java:121)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:990)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:130)
at android.app.ActivityThread.main(ActivityThread.java:3714)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:853)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:611)
at dalvik.system.NativeStart.main(Native Method)

Перед загрузкой проверяется наличие и контрольная сумма загружаемого apk. В чем может быть проблема не знаю, попробовал использовать PathClassLoader и скармливать ему распакованный dex файл, но у меня это не работает. В оф. доках все достаточно обобщенно описано, может есть какой-то более низкоуровневый но надежный способ загрузить внешний dex файл. Кто-то сталкивался с такой проблемой?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.12.2015, 17:30
Здравствуйте! Я подобрал для вас темы с ответами на вопрос DexClassLoader не работает (Программирование Android):

Мышь работает через раз, то есть запустил ОС - мышь не работает, перезагрузил - мышь работает - Windows 7
Установлена Windows 7 со всеми последними обновлениями. Все всегда замечательно работало. Но с недавних пор мышь стала работать через раз....

У клиента не работает роутер. У Меня дома работает. TRENDnet TEW-432BRP - Сетевое оборудование
Добрый день! У клиента установлен TRENDnet TEW-432BRP. Настроен для подключения к Beeline, но это не совсем важно. До определенного...

Так работает или не работает второй слот для оперативной памяти - Оперативная память
Моему компьютеру уже больше 7-ми лет, купили мне его в сентября 2005 года. На то время очень даже неплохие характеристики: Процессор:...

Из-за чего интернет работает на техникумовских компьютерах и не работает подключении к моему ноутбуку - Сети
В Техникуме есть разные компьютеры - для учителей - для студентов - библиотечные ...перепробовал и библиотечные и студенческие и...

Windows 7, не работает часть служб, не работает сеть, восстановление системы не помогает - Windows 7
Приветствую коллеги! Сам админю уже лет 10, не случалось ситуации еще что гугл не помогал, но вот пришел в организацию, на пк банк клиент,...

IE опять все портит, в 9 версии работает, а в остальных нет. не работает float - HTML, CSS
сайт http://gkantecreo.ru/ вверху в шапке слайдер в блоке div с css {float: left; padding-left: 15px;} везде прижат слева, а в &quot;интернет...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.12.2015, 17:30
Привет! Вот еще темы с ответами:

Подключение библиотеки DLL C++: работает на примере консоли и не работает в WinForms App - C++/CLI WinForms
Здравствуйте! Помогите начинающему бедному студенту!! Осваиваю С++. В книге Прохоренко(программирование в visual studio 2010 express)...

AS 3.0 Swf не работает, а в тестовом режиме в самом flash и формате exe работает - ActionScript
Доброго времени суток. Такая проблема: есть рабочий код обмена данными с php скриптам. В тестовом режиме(ctrl+Enter) все работает, при...

Ноутбук работает только с Wi Fi роутера дома, в кафе не работает и везде. Почему? - Wi-Fi
Подскажите пожалуйста, почему у меня ноутбук с виндой 7, работает вай фай только дома с роутера. А когда я прихожу в кафе или в парк, у...

Работа с excel: 11 версия не работает с 2010 офисом, но работает с 2007, 2013 - C++/CLI
Имеются несколько Microsoft.Office.Interop.Excel.dll,которые используются для записи в excel документ. Проблема в том что 11 версия не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru