如何将我的Android库模块中的资源(字符串,维度,颜色等)设为私有?
我已经尝试了两种记录方式,但都没有工作......
res/values/public.xml
不起作用;所有资源仍然存在
在使用此库的应用程序中公开。res-public/values/public.xml
文件夹也不起作用;所有的
资源是私有的,但是public.xml
中列出的资源
文件不应公开,因为它们应该是公开的。是否有人拥有将图书馆资源设为私有的明确指示?是否有任何开源库已正确地将其资源私有化?
我正在使用......
buildToolsVersion "24.0.2"
com.android.tools.build:gradle:2.2.3
答案 0 :(得分:4)
除非您明确地声明模块中的任何资源是公开的,否则假定您的资源在任何模块(库等)中都是公共的。此时,您基本上选择将每个资源(模块内)作为私有资源,除非您标记为公共资源。这样可以保持向后兼容性,让您逐步减少具有许多模块的大型项目的访问权限。
要将所有资源设为私有,只需添加< public />到任何现有的资源文件。
上面的答案讨论了添加特定资源目录以管理公共/私有修饰符。虽然这有效,但我可能会建议您在声明它们的位置旁边的主资源文件中管理可见性和声明。这是我用一个全新的库模块的示例strings.xml资源文件。字符串名称中的公共/私有前缀仅用于说明目的。
<强> RES /值/ strings.xml中强>
<resources>
<string name="app_name">My Library2</string>
<public type="string" name="public_string_in_lib2" />
<string name="public_string_in_lib2">public string in lib2</string>
<string name="private_string_in_lib2">private string in lib2</string>
</resources>
从根本上说,这些资格用于创建嵌入在AAR中的public.txt文件,该文件将由另一个模块依赖。 Android Studio等各种工具将使用此信息进行标记/警告,但从技术上讲,除非他们的工具非常严格,否则不会阻止库的使用者使用该资源。
答案 1 :(得分:2)
选项#2实际上有效。我没有在build.gradle中正确定义sourceSets
...
sourceSets {
main.res.srcDirs = [
'src/main/res',
'src/main/res-public'
]
}