在包中更改类的规范名称

时间:2015-05-08 20:48:38

标签: java android packages rome

一些背景知识(与我的问题没有直接关系相当普遍):我想使用Android ROME Feed Reader库来解析具有媒体内容的RSS源。但ROME不支持开箱即用的媒体,所以我想利用一个媒体插件,它作为一个单独的JAR,并建立在原始库的基础上。

所以我有两个JAR(我没有源代码),我的gradle依赖项如下所示:

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

问题是来自Android版ROME的软件包名称都以com.google.code.rome.android.repackaged.为前缀,与原始库有关。

例如,Android ROME 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

有解决方法吗?我可以以某种方式静态更改库中所有类的规范名称吗?还是有其他解决方案吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

哈,这是一个愚蠢的问题。之前看过这样的东西。你最简单的赌注是:Jar Jar Links

简单:

  • 使用以下内容在jarjar.jar所在的目录中创建rules.txt:
  • java -jar jarjar.jar rules.txt ~/path_to/old_jar ~/path_to/new_jar
  • cd到jar目录jarjar.jar
  • 运行class Semestres extends Controller { function __construct(){ parent::__construct(); } public function index(){ $this->view->fetchSemestres = $this->model->fetchSemestres(); $this->view->render('semestres/index'); } }

应该重新包装一切,不要傻。