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