簡體   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