我有一个Android库项目,在res / raw目录中包含文本数据文件,可通过getAssets()。open(R.id.xxx)和InputStream访问。此内容仅在库中访问和处理。
库的目的是为外部客户分发,因此我需要隐藏文件的内容以及库的实现。当图书馆变成一个应用程序时,一切正常。但是,如果我将它用作外部应用程序中的库,我会收到运行时错误。
我创建了一个Android应用程序,并将库jar文件作为外部jar包含在应用程序的libs目录中。但是,该应用程序的运行时错误为classdefnotfound R$Raw
。库jar文件中没有包含res / raw。
有没有办法隐藏库中的数据和实现,还能为客户提供库吗?
答案 0 :(得分:0)
没有。将库部署到jar时,将不包括库项目的src
文件夹中的所有内容。甚至可以从完成的apk文件获得资源;您所要做的就是将apk文件作为存档打开,您将看到资源及其文件的整个文件夹层次结构。因此,您无法隐藏任何人的资源文件。您必须找到一种方法将文件中的数据集成到.java文件中。
所期望的是,您只在库中使用.java文件,编译成jar,将jar与资源文件一起提供给开发人员。然后,开发人员将把这些资源文件放在他自己的应用程序集成的res
文件夹中。
答案 1 :(得分:0)
使用适用于Gradle 1.3或更高版本的Android插件,您现在可以将您的资源声明为私有资源。最初,您的库中的所有资源都被视为公共资源,当您使用标记<public>
将其中一个资源声明为公共资源时,所有其余资源将自动变为私有。
<resources>
<public name="mylib_app_name" type="string"/>
</resources>
有关详细信息,请参阅Android Studio Public and Private Resources。