[英]android R.java mapping to resource layouts when a library project is added
添加库项目时 ,我对android R.java行为的问题进行了一些研究
我观察到,将库项目添加到任何android项目时,都会创建两个R.java文件。
项目.R.java
public static final class layout {
public static int capture=0x7f030000;
public static int main=0x7f030001;
}
库文件
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的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);
}
}
来自: Android开发者网站
当您构建依赖于库项目的应用程序时,SDK工具会将库编译为一个临时JAR文件,并在主项目中使用它,然后使用结果生成.apk。 如果在应用程序和库中都定义了资源ID,则这些工具可确保在应用程序中声明的资源具有优先权,并且确保库项目中的资源不会编译到应用程序.apk中。 这使您的应用程序可以灵活使用或重新定义任何库中定义的任何资源行为或值。
希望它能回答您的问题
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.