更改 类' 包中的规范名称
Changing classes' canonical names in package
一些背景知识(不直接相关,因为我的问题很笼统):我想使用 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 版本的 ROM 中的软件包名称都以 com.google.code.rome.android.repackaged.
为前缀,相对于原始库。
例如,Android ROME 库包含以下接口:
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
有解决办法吗?我可以以某种方式静态更改库中所有 类 的规范名称吗?或者有其他解决方案吗?
谢谢!
哈,这是个愚蠢的问题。以前见过这样的东西。您最简单的赌注是:Jar Jar Links.
简单:
- 在与 jarjar.jar 相同的目录中创建一个 rules.txt,其中包含以下内容:
rule com.google.rome.** com.foo.bar.@1
- cd 到 jarjar.jar
的目录
- 运行
java -jar jarjar.jar rules.txt ~/path_to/old_jar ~/path_to/new_jar
应该重新打包一切,以免你犯傻。
一些背景知识(不直接相关,因为我的问题很笼统):我想使用 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 版本的 ROM 中的软件包名称都以 com.google.code.rome.android.repackaged.
为前缀,相对于原始库。
例如,Android ROME 库包含以下接口:
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
有解决办法吗?我可以以某种方式静态更改库中所有 类 的规范名称吗?或者有其他解决方案吗?
谢谢!
哈,这是个愚蠢的问题。以前见过这样的东西。您最简单的赌注是:Jar Jar Links.
简单:
- 在与 jarjar.jar 相同的目录中创建一个 rules.txt,其中包含以下内容:
rule com.google.rome.** com.foo.bar.@1
- cd 到 jarjar.jar 的目录
- 运行
java -jar jarjar.jar rules.txt ~/path_to/old_jar ~/path_to/new_jar
应该重新打包一切,以免你犯傻。