1

ライブラリプロジェクトが追加されたときのandroid R.javaの動作に関する質問について調査し ました

ライブラリ プロジェクトを任意の Android プロジェクトに追加すると、2 つの R.java ファイルが作成されることがわかります。

project.R.java

 public static final class layout {
    public static int capture=0x7f030000;
    public static int main=0x7f030001;
}

lib.R.java

public static final class layout {
    public static final int add=0x7f030000;
    public static final int capture=0x7f030001;
    public static final int main=0x7f030002;
}

ライブラリとして設定されたプロジェクトには、次のような独自のR.javaがあります

 public static final class layout {
    public static int capture=0x7f030000;
    public static int main=0x7f030001;
}

サンプル ライブラリには、アプリケーションから開始するアクティビティが 1 つだけあり、このアクティビティはレイアウト メインを設定します。ここで、R.java の「main」の ID がアプリケーションとライブラリ プロジェクトで異なることがわかります。ライブラリから id の値を出力しようとしましたが、アプリケーション R.java ファイルの値である 0x7f030002 が表示されました。

今、私のアプリケーションにはメインレイアウトがなく、コンテンツを smain に設定するとライブラリにあり、ライブラリプロジェクトから main.xml を設定します!! アプリケーション プロジェクトにメイン レイアウトを追加すると、ライブラリはこのメインをレイアウトとして設定します。

つまり、メインの ID はアプリケーションの R.java から取得され、この ID はライブラリのメインの ID とは異なりますが、レイアウトはライブラリから正しく選択されます。

これはどのように起こっているのですか 助けてください

私のアプリのアクティビティ:

import com.idg.test.lib.TestLibActivity;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;

public class TestProjectActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    Log.i("starting","oncraete main id "+ R.layout.main);
    super.onCreate(savedInstanceState);
    setContentView(R.layout.add);
    startActivity(new Intent(this,TestLibActivity.class));

}

}

ライブラリ アクティビティ:

    import android.app.Activity;
import android.os.Bundle;
import android.util.Log;

public class TestLibActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Log.i("Library","Library main id" +R.layout.main );
    setContentView(R.layout.main);
}

}

4

1 に答える 1

8

From : Android デベロッパー サイト

ライブラリ プロジェクトに依存するアプリケーションをビルドすると、SDK ツールはライブラリを一時 JAR ファイルにコンパイルし、それをメイン プロジェクトで使用してから、結果を使用して .apk を生成します。アプリケーションとライブラリの両方でリソース ID が定義されている場合、ツールは、アプリケーションで宣言されたリソースが優先され、ライブラリ プロジェクトのリソースがアプリケーションの .apk にコンパイルされないようにします。これにより、アプリケーションは、任意のライブラリで定義されているリソースの動作または値を使用または再定義できる柔軟性が得られます。

それがあなたの質問に答えることを願っています

于 2012-04-04T05:52:02.023 に答える