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