添加库项目时,android R.java映射到资源布局

时间:2012-04-03 14:04:53

标签: android r.java-file

我对我的问题进行了一些研究 android R.java behavior when a library project is added

我观察到当一个库项目被添加到任何android项目时,会创建两个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;
}

示例库只有一个活动,我从我的应用程序开始,此活动设置布局主要。 现在,如果我们看到R.java中“main”的id在我的应用程序和库项目中是不同的。我试图从库中打印id的值,并给出0x7f030002,这是我的应用程序R.java文件中的值。

现在我的应用程序没有主要布局,而在库中,当我设置内容为smain时,它从库项目设置main.xml! 如果我将主布局添加到我的应用程序项目中,则lib会将此main设置为其布局!!

即main的id来自我的应用程序的R.java,这个id与库中main的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));

}

}

lib活动:

    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);
}

}

1 个答案:

答案 0 :(得分:7)

来自:Android developer site

  

当您构建依赖于库项目的应用程序时,   SDK工具将库编译为临时JAR文件并在其中使用   主项目,然后使用结果生成.apk。在案件   在应用程序和应用程序中定义资源ID的位置   库,工具确保在中声明的资源   应用程序获得优先级,并且库项目中的资源   未编译到应用程序.apk中。这给你的应用程序   使用或重新定义任何资源行为的灵活性   在任何库中定义的值。

希望它能回答你的问题