2015-05-08 4 views
0

Немного фона (не так важно, поскольку мой вопрос довольно общий): Я хочу использовать библиотеку Reader для чтения ROME для анализа RSS-канала с медиа-контентом. Но ROME не поддерживает средства массовой информации из коробки, поэтому я хочу использовать медиа-плагин, который поставляется как отдельный JAR и основывается на исходной библиотеке.Изменение канонических имен классов в пакете

Так у меня есть два JARs (для которого у меня нет исходного кода), и мои Gradle зависимости выглядеть следующим образом:

dependencies { 
    compile files('libs/android-rome-feed-reader-1.0.0.jar') 
    compile files('libs/mediarss-0.2.3.jar') 
} 

Проблема в том, что имена пакетов из Android версии РИМА все приставка с com.google.code.rome.android.repackaged. относительно исходной библиотеки.

Например, Android РИМ Lib содержит следующий интерфейс:

package com.google.code.rome.android.repackaged.com.sun.syndication.feed.module; 
public interface Module { /* ... */ } 

В то время как все классы в медиа-плагином обратитесь к оригинальным канонические имена:

public interface MediaModule extends com.sun.syndication.feed.module.Module { /* ... */ } 

Вполне естественно, что компиляция терпит неудачу:

Error:(69, 34) error: cannot access Module 
class file for com.sun.syndication.feed.module.Module not found 

Есть ли обходной путь для этого? Могу ли я каким-либо образом статически изменять канонические имена для всех классов в библиотеке? Или есть другое решение?

Спасибо!

+0

ДЕЙСТВИТЕЛЬНО просто переупакованы? – rmalchow

+0

На странице проекта он просто говорит: «Android ROME Feed Reader - это переупаковка ROME, чтобы он работал на устройствах Android». Я не уверен, что они подразумевают под этим, и как только переупаковка будет иметь какое-то значение. Я думал, что может быть больше, но опять же, я не нашел источников. Если я не получу его на работу, я предполагаю, что прибегу к оригинальному ROME. – SqueezyMo

ответ

0

Ха, это глупая проблема. Видел такие вещи раньше. Ваша самая легкая ставка такова: Jar Jar Links.

Простой:

  • Сделать Rules.txt в том же каталоге, jarjar.jar со следующим:
  • rule com.google.rome.** [email protected]
  • кд в тэ каталог jarjar.jar
  • запустить java -jar jarjar.jar rules.txt ~/path_to/old_jar ~/path_to/new_jar

Необходимо переупаковать все для ya, чтобы не было глупо.

+1

Да, это _exactly_ то, что я искал! Работаю, как шарм, спасибо! Если кому-то это понадобится, я использовал 'rule com.google.code.rome.android.repackaged.com. ** com. @ 1' (исключая' com.' вызывает NPE) – SqueezyMo