Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说
android resource compilation_Android resource linking failed,希望能够帮助你!!!。
第一次在framework中添加资源,直觉以为在frameworks/base/core/res中添加编译即可使用,结果还是出现类似如下错误:
frameworks/opt/telephony/src/java/android/telephony/SmsMessage.java:369: error: cannot find symbol
if (r.getBoolean(com.android.internal.R.bool.config_sms_force_7bit_encoding1)) {
^
symbol: variable config_sms_force_7bit_encoding1
location: class bool
果断到Lollipop/out/target/common/R/com/android/internal/R.java查找是否有该资源ID生成,结果没有。
通过必应哥搜索前辈经验,以及根据自己的理解,总结在framework中添加资源需要如下几步才行:
1.将资源添加到Lollipop/frameworks/base/core/res/res/values/strings.xml中,如果在实际开发中建议是将自己的资源另创建strings_xx.xml
文件来存放。
2.如果资源为private的需要手动添加到symbols.xml中,格式类似<java-symbol type="string" name="config_wifi_random_mac_oui" />,
为什么说private的资源加到symbols.xml中呢,可以看如下symbols.xml文件中的注释,一目了然。
<!-- We don't want to publish private symbols in android.R as part of the
SDK. Instead, put them here. -->
<private-symbols package="com.android.internal" />
这里面的资源,通过com.android.internal.R.XXX来访问,例如com.android.internal.R.string.anna
如果资源为随着SDK release给开发者用的平台公用资源,需要将其手动添加到public.xml中,格式参考public.xml中已有的资源格式。
public.xml的官方注释,该资源release出来就必须存在,且其需要make update-api将其写到frameworks/base/api/current.txt中。
public.xml的首行注释:
<!-- This file defines the base public resources exported by the
platform, which must always exist. -->
添加在这里的资源,根据理解可以通过android.R.XXX来进行使用,例如 android.R.string.cancel
忘了说一句了,通过make update-api将该资源的ID生成在current.txt中为如下格式
field public static final int ic_menu_close_clear_cancel = ; // 0x
通过这个可以通过aapt dump资源的时候可以直接grep该资源的ID哦,前面为十进制,后面注释为十六进制。
3.上两步修改完成之后需要mm frameworks/base/core/res,重新编译生成framework-res.apk
4.现在转到需要使用该资源的模块,该模块可能还需要修改Android.mk文件,让需要使用资源的模块能够访问到frameworks的R,
在Android.mk文件中添加如下配置:
framework_res_source_path := APPS/framework-res_intermediates/src
LOCAL_INTERMEDIATE_SOURCES := \
$(framework_res_source_path)/android/R.java \
$(framework_res_source_path)/android/Manifest.java \
$(framework_res_source_path)/com/android/internal/R.java
这样本模块mm就可以编译通过了。
如上描述的方式是在现有的framework-res.apk中添加资源,而如果想要在framework添加一个新的XXX-res.apk,需要修改framework的Android.mk
文件,AssetManager等内容,可以参考http://blog.csdn.net/argonwu/article/details/,这篇blog可以作为参考,如果要想添加成功可能还得
————————————————
版权声明:本文为CSDN博主「AnnaLoad」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/AnnaLoad/article/details/
今天的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。