Использование библиотеки Picasso в AIDE

268
20 декабря 2016, 23:52

Здравствуйте, в связи с отсутствием компьютера и желанием идти в ногу со временем, я решил найти способ использовать сторонние библиотеки в Android IDE (AIDE). Это приложение для разработки приложений прямо на телефоне. Захотел поюзать Picasso и зашёл вот сюда и скачал JAR архив с библиотекой. Далее я не нашёл возможности сунуть этот JAR в AIDE, поэтому придумал лайфхак.

Что я сделал

Я обнаружил, что AIDE использует собственный android.jar, в котором находятся .class файлы. В этом архиве есть все классы Java и Android, а также присутствует иерархия по папкам. Ясное дело, что AIDE использует этот архив для загрузки импортов.

Также я обнаружил, что JAR архив библиотеки Picasso также представляет собой иерархию файлов .class. У меня появилась идея.

Какая?

Я просто взял и извлек из архива папку com. Тем самым всю библиотеку (com.squareup.picasso.*) и аккуратно положил в корень архива android.jar. Новый архив с добавленной библиотекой я положил на место и запустил AIDE. Захожу в java файл и пишу в секцию импортов

import com.squareup.picasso.*;

Работает! Далее пишу (ну так, чтобы окончательно удостовериться)

Picasso.with(this)

Дописывать и проверять не стал, ибо синтаксис подсвечен, ошибок нет. Я было хотел поделиться идеей в блоге на G+, но отложил. Сейчас пришло время поюзать библиотеку. Я решил начать с простого - отобразить в ImageView картинку из файла на устройстве. Эта строка кода из адаптера, к тому же я получаю из БД путь к картинке, поэтому используется курсор

Picasso.with(context)
.load(new File(cursor.getString(cursor.getColumnIndex(Helper.PATH))))
.into(holder.item_photo);

Запускаю. И тут бац!

 java.lang.NoClassDefFoundError: Failed resolution of: Lcom/squareup/picasso/Picasso;
ru.turbomedia.picassotest.MainActivity$ExpAdapter.getGroupView(MainActivity.java:376)

Жалуется именно на эту строчку

Мои догадки

Наверное, дело в том, что я совершил глупую ошибку и зря манипулировал JAR исходниками. Мне кажется, что в android.jar нельзя было добавлять библиотеку. Ведь, библиотека это набор классов и методов, которые работают внутри себя и ни от чего не зависят. А в android.jar лежат что-то типа .aidl файлов, которые нужны лишь для того, чтобы в среде разработки отображались методы, константы, классы, интерфейсы, и т.д и т.п. Среда компилирует код а он уже выполняется на устройстве, так как существует API фреймворк.

Этот вывод я сделал благодаря знаниям по созданию прошивок, но может быть некорректным.

Что делать?

Я таким образом добавил не только Picasso, но и другие популярные библитеотеки, такие как Retrofit, OkHttp, Gson и даже нашёл сайт с maven-repositories и забил хром закладками на понравившиеся библиотеки. Там были как JAR так и AAR архивы, которые я запланировал таким же образом добавлять и использовать. Но все-таки вовремя проверил. Есть ли какой-нибудь альтернативный рабочий способ добавить библиотеки в AIDE?

P.S - Не предлагайте использовать Clone GIT Repository, это сплошные грабли, т.к качается целая куча мусора для студии и я здорово путаюсь.

Есть вариант с ручным копированием исходников библиотек в проект, но это сплошные нервы, так как буфера обмена не хватает скопировать весь код (если брать на гитхабе) и приходится начинать все сначала из-за этого. Если качать JAR-ы, то там будут скомпилированные классы.

Answer 1

Нашёл решение. Делается все проще

1) Скачать библиотеку в jar 2) Рядом с папкой src создать папку libs 3) Положить туда jar с библиотекой 4) Долго нажать и выбрать Ad library to project

Сверху начнёт выполняться загрузка архива, что происходит дальше я не знаю но использовал библиотеки можно.

READ ALSO
алгоритм Тайного Санты (SSA - Secret Santa Algorithm)

алгоритм Тайного Санты (SSA - Secret Santa Algorithm)

Готовлю новогоднюю вечеринку с друзьями, решили сыграть в тайного сантуНо до нового года не встречаемся, поэтому жеребьевка удаленно

422
Сколько весит объект в java?

Сколько весит объект в java?

Есть в проекте одна проблема, которая решается двумя способамиНо я не могу оценить какой способ будет "дешевле" для памяти

367
Java и Jsoup помогите

Java и Jsoup помогите

Вот мой код

366
Вывод всех значений HashMap

Вывод всех значений HashMap

Добрый деньПрограмма должна выдавать ключ и несколько значений по этому ключу, но значения выводятся в виде кода: [{Person@1b6d3586=[Phone@4554617c, Phone@74a14482]}]...

338