2017-06-01 17 views
0

リソースID(R.java)をjarファイルに直接入れることはできません。私たちがすれば、彼らが一意になることを保証する方法はありません。しかし、R.javaなしでjarファイルをコンパイルする方法は?私のコードで私はよくXXXのIDを取得するためにR.style.xxxのように呼ぶのですが、私はr.javaを持っていない場合、コンパイルされませんです:(r.javaを使わずにjarファイルを作成するには?

を私はこの

%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 

ように私のjarファイルを構築しますr.javaこのような単なるDUMYファイル:

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\ 
+0

これをコンパイルし、jarの古いR.classを新しいものに置き換えます。しかし正直なところ、xmlファイルを使ってそのようなデータを保存するだけです。 – redxef

+0

私はjarからrクラスも削除しましたが、R.style.xxxは削除されたr.javaの値を指すスタイルです:( –

+0

はい、R.javaを – redxef

答えて

0

我々が行う場合、彼らはもっと

一意であることを保証する方法はありません重要なのは、彼らは正しいになるという保証はありません。それらは単なる乱数ではありません。 APKのパッケージ化方法とリソースの読み方に結びついています。

しかし、R.javaを使わずにjarファイルをコンパイルするにはどうすればいいですか?

これがライブラリモジュールの場合、プロジェクトからのすべてのリソース(およびJavaからのすべての参照)を排除できます。次に、a custom Gradle taskを使用してJARを作成できます。

唯一の方法は、getResources().getIdentifier()を使用して実行時にJavaコード内のすべてのR参照を避けることです。次に、JAR以外のリソースを使用してJARを出荷します。 JARを使用するアプリケーションは、ライブラリのリソースをアプリ独自のリソースとマージする必要があります。率直に言って、出版社と消費者にとってより簡単で安全なので、AARを発行することをお勧めします。

+0

ありがとう!私は問題を見つけました。あなたは最終的に、あとでr.classをjarから後で削除しても、値はまだここにあります:( –

関連する問題