Как я могу импортировать библиотеку поддержки Android таким образом, чтобы я мог ее изменить?

Я хочу изменить сам класс ViewPager в Android Studio. В настоящее время у меня есть библиотека support-v4 в качестве зависимости от библиотеки, но я знаю, что Android Studio не позволяет напрямую редактировать внешние библиотеки.

Попытка 1: я попытался вставить копию ViewPager внутри пакета java.android.support.v4.view в моем проекте. Когда я модифицировал и протестировал его, он, похоже, не работал, так как отображал стандартную функциональность ViewPager вместо модифицированной.

Попытка 2: я попытался изменить имя пакета на com.example.view, чтобы отличить его от библиотеки поддержки. Это не сработало, так как некоторые функции ViewPager зависят от правильного имени пакета, и это вызвало некоторые ошибки, такие как ClassCastException.

Попытка 3: я попытался поместить ViewPager во вновь добавленный модуль с именем "lib", который я включил в settings.gradle и добавил в качестве зависимости для моего модуля "app". Кажется, тоже не работает.

Чего я не пробовал, так это избавиться от зависимости gradle support-v4 и вместо этого скопировать весь исходный код в мой проект. Это немного, и я бы предпочел не делать этого, так как я хочу поддерживать библиотеку support-v4 в актуальном состоянии, переопределяя только класс ViewPager. (Также я не уверен, как получить последнюю версию исходного кода. Я слышал, что они только открывают исходный код каждого основного выпуска API.)

Что я могу сделать отсюда? Заранее спасибо.

2 ответа

Решение

Что я могу сделать отсюда?

Повторите попытку 2. При необходимости скопируйте другие классы (например, PagerAdapter) в ваш com.example.view пакет и переключите код приложения для ссылки на эти классы. По сути, вы разветвляетесь ViewPagerи это может потребовать от вас раскошелиться не только на один класс.

Обратите внимание, что другой код, который ожидает реального ViewPagerТакие, как индикаторы, не будут работать с вашей вилкой и сами должны быть разветвлены.

Вы можете рассмотреть возможность обработки ваших изменений с помощью простого подкласса.

Я знаю, что Android Studio не позволяет напрямую редактировать внешние библиотеки

Более того, как вы заметите позже в своем вопросе, если вы изменяете библиотеку, вам придется повторно применять эти изменения всякий раз, когда эта библиотека изменяется.

Также я не уверен, как получить последнюю версию исходного кода

Java находится на вашем жестком диске, в хранилище Android. Ищите ...sources.jar файл.

Как правило, изменение сторонней библиотеки не является хорошей идеей, если вы действительно не знаете, что делаете. Вы можете легко сломать все, не понимая всех зависимостей класса и метода.

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

Другие вопросы по тегам