繁体   English   中英

如何在没有r.java的情况下构建jar?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM