[英]How to build a jar without the r.java?
我们不能将资源ID(R.java)直接放在jar文件中。 如果我们这样做,就无法保证它们将是唯一的。 但是如何在没有R.java的情况下编译jar? 在我的代码中,我经常调用R.style.xxx
类的R.style.xxx
来获取xxx的ID,但是如果我没有r.java,它将无法编译:(
我这样构造我的罐子
%JDK_PATH%\javac -cp^
%ANDROID_PLATFORM%\android.jar;^
-d source\output^
source\java\com\mylib\util\r.java^
source\java\com\mylib\view\myCustomView.java
r.java只是一个像这样的伪文件:
package com.mylib;
public final class R {
public static final class dimen {
public static final int al_floating_toolbar_horizontal_margin=0;
public static final int al_floating_toolbar_vertical_margin=0;
public static final int al_floating_toolbar_preferred_width=0;
public static final int al_floating_toolbar_minimum_overflow_height=0;
public static final int al_floating_toolbar_maximum_overflow_height=0;
public static final int al_content_rect_bottom_clip_allowance=0;
public static final int al_floating_toolbar_height=0;
public static final int al_floating_toolbar_menu_button_minimum_width=0;
}
}
然后我删除所有R.class之后,然后创建jar:
%JDK_PATH1_7%\jar cf lib\jar\mylib.jar -C source\output com\mylib\
如果我们这样做,就无法保证它们将是唯一的
更重要的是,不能保证它们将是正确的 。 这些不仅仅是随机数。 它们涉及APK的打包方式以及如何读取资源。
但是如何在没有R.java的情况下编译jar?
如果这是一个库模块,则可以消除项目中的所有资源(以及Java中对它们的所有引用)。 然后,您可以使用自定义Gradle task创建一个JAR。
唯一的选择是避免Java代码中的所有R
引用,而使用getResources().getIdentifier()
在运行时查找它们。 然后,使用JAR之外的资源运送JAR。 使用JAR的应用程序需要将库的资源与应用程序自身的资源合并。 坦白说,我希望您发布AAR,因为这对于发布者和消费者而言都更加容易和安全。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.