Android开发中,在定义任何应用相关资源时,都需要定义一个唯一标识来指向这个资源,Android中用来指向资源的唯一标识基本就是id和name这两个属性,这两个属性在编译时,会自动在R文件中生成静态的int值。
注:普通的Android工程在R文件中生成的int值是static final的常量,而作为library的Android工程在R文件中生成的int值是static的变量,所以有时switch case中用library项目中的资源id进行判断时会编译错误,就是这个原因(非常量)
- ids.xml文件
使用ids.xml文件,就是预先定义了资源id而已。在布局文件中定义控件的id一般是“@id/”和“@+id/”。使用@+id方式定义资源id,在工程编译时,如果R文件中还没有同名的变量,就随机生成一个int值指向这个变量;如果R文件中已经存在了同名的变量,这个控件就会直接使用这个变量作为标识。
使用@id方式可以直接引用已经存在资源id变量,使用ids.xml方式,就相当于提前定义了资源id,这样在布局文件中定义控件id时,可以直接使用@id医用ids.xml文件中定义的资源id,这样的好处就是有利于同于管理。
2、public.xml文件
如果在library中有界面或者用到library中定义的资源文件,在其它普通项目中使用这个library时,可能出现资源找不到的情况。
原因:因为library在打包成jar包时,如果代码中使用的是如View v=findViewById(R.id.view),加入这个id.view在R文件中自动生成的值是0x7f090051,nameR.id.view就会被替换成0x7f090051。因为library在使用它的项目进行编译时,也会重新生成R文件,值可能会发生变化,例如0x7f090052,这个时候就会出现资源找不到的问题。
使用public.xml文件,就是将资源ID直接写死,不在R文件中随机生成,这样就不会出现资源找不到的情况。
3、将library的AndroidManifest和主程序的配置进行合并
方法:在project.properties定义manifestmerger.enable=true,这样会自动将library的androidManifest配置和主程序进行自动合并。
注意:library的ADT版本、minSdkVersion和targetSdkVersion必须好主程序的相同,否则会在编译时出错。