用于 Android 库 (aar) 的 assets/ 目录中的资产

Posted

技术标签:

【中文标题】用于 Android 库 (aar) 的 assets/ 目录中的资产【英文标题】:Assets in assets/ directory for Android library (aar) 【发布时间】:2018-10-12 04:52:32 【问题描述】:

基于android Library Considerations:

库模块不能包含原始资产

我创建了一个示例 android 库模块,其中包含资产(不在 app 模块中),然后生成了 aar 文件。我分析了生成的 aar 文件,瞧,assets/ 文件夹仍然存在,所有文件都完好无损。

那么,是允许还是不允许?

【问题讨论】:

我觉得可以,我在很多项目中都看到了! Can I confidently distribute my aar file to my clients? 您是单独分发aar文件,还是始终与应用程序捆绑(合并resassets )? 我想将它分发给我的客户,以便我的客户可以在他们自己的应用程序中使用我的 aar 文件。 你混淆了吗?请进行验证,因为在 apk 的逆向工程中,任何人都可以看到资产中的文件。 混淆是我的下一步。到目前为止,我想得到我发布的问题的答案。 【参考方案1】:

我认为一些开发考虑已经过时了。例如,他们还说必须在库和应用程序中声明 <uses-library> 元素(现在由清单合并处理)。

顺便说一下下面几行,AAR 文件剖析表明 AAR 文件可能包含一个/assets/ 目录

【讨论】:

【参考方案2】:

android 库中不允许使用文件夹 assets/。您可以从 res/raw 访问它 使用以下代码。

context.getResources().openRawResource(R.raw.file_name);

【讨论】:

【参考方案3】:

我在Android Library Considerations: 和GoogleMay 7, 2018 issuetracker 79311037 上提出了这个文档问题

正在处理中,这是最新评论(Jul 14, 2018):

除了错误之外,文档本身也自相矛盾,因为 底部的“AAR 文件剖析”部分是否包含一个 资产目录。

【讨论】:

【参考方案4】:

这里有一些关于这个主题的有趣帖子:

how to reference an asset in a library project

Android Library assets folder doesn't get copied

它只是说:库模块不能包含原始资产 它没有说 库模块不应包含原始资产。也许在过去它不受支持。现在上面的帖子和他们的回答表明它是受支持的。

【讨论】:

以上是关于用于 Android 库 (aar) 的 assets/ 目录中的资产的主要内容,如果未能解决你的问题,请参考以下文章

Android 库 (jar/aar) 可以用于 Xamarin 中的 iOS

如何使用 proguard 混淆 android 库(.aar)?

将 Kotlin 运行时库添加到 android 中的 aar

如何发布带有远程依赖项 (gradle) 的 Android 库 (aar)?

Android库项目瞬态依赖松散AAR类型

使用 Android 库 (AAR) 时出现 AndroidRuntime 错误 ClassNotFoundException