【发布时间】:2011-08-18 21:22:36
【问题描述】:
我正在创建一个 Android 库,它有一个带有图像的 assets 文件夹。
当我在另一个项目中使用它时,资产不会被复制。
其他人有这个问题吗?
【问题讨论】:
我正在创建一个 Android 库,它有一个带有图像的 assets 文件夹。
当我在另一个项目中使用它时,资产不会被复制。
其他人有这个问题吗?
【问题讨论】:
基于 Gradle 的new Android Build System 支持库项目中的资产文件夹!
使用基于 ANT 的构建仍然不可能:
图书馆项目不能包含原始资产。 (见docs)
但你可以
【讨论】:
build.gradle 中将依赖项声明为@aar,以确保将依赖项包含为@987654326 @不仅仅是jar。这可能并非在所有情况下都是必要的,但我发现大部分时间都是必要的。所以为了安全起见,当依赖于需要共享资源的库时,我会使用@aar 后缀。我认为在 Maven 上部署库时这是必需的
首先创建android lib项目,创建后关闭。这将阻止自动构建
在windows android上使用cmd终端命令是批处理文件
将工具添加到路径 C:\Users\user_bss>PATH=%PATH%;C:\adt-bundle-windows-x86-20140321\sdk\tools
为 ant 生成 build.xml android 更新项目 -p C:\Users\user_bss\Documents\Workspace\SDKAdvanced -n SDKAdvanced
notepad custom_rules.xml 添加上面的代码不要忘记结束标签
运行“ant debug”或“ant release”来构建
你会在 bin 目录中看到 classes.jar 这是你打包的库
【讨论】:
对于使用 IntelliJ IDEA 的用户,您可以更改应用程序模块的打包设置以包含相关资产。请注意,这是在 IntelliJ 社区版的 14.0.2 版上完成的。我的主应用程序模块现在从我的库项目的资产文件夹中继承文件,就好像它们就在主项目中一样!
右键单击应用程序模块 > 打开模块设置。在模块 > 打包选项卡上选择 Android 树节点。勾选“将依赖项中的资产包含到 APK 中”
注意:我从未使用过 Android Studio,但我猜想在该应用程序中有类似的设置。
【讨论】:
可以通过小修复将资产放入生成的库 jar 中:
将“custom_rules.xml”放入您的库项目主页(靠近 build.xml):
<?xml version="1.0" encoding="UTF-8"?>
<project name="custom_rules">
<target name="-post-compile" if="${project.is.library}">
<echo>Post Compile: add assests from ${asset.absolute.dir} to ${out.library.jar.file}</echo>
<jar destfile="${out.library.jar.file}" update="true">
<zipfileset dir="${asset.absolute.dir}" prefix="assets" excludes="**/*.java ${android.package.excludes}"/>
</jar>
</target>
这会将您的库资源打包到生成的库 jar 中。因此,这些资产将包含在您的应用程序生成的 .apk 中。
在 OSX 上的 Android SDK Tools Revision 21.1.0 上检查
【讨论】:
在 Eclipse 和 ANT 中,您可以从多个项目中引用相同的“assets”文件夹。 这允许您的源代码树拥有资产文件的单个副本,但将它们包含在多个 APK 中。
见Android: targeted res folders for debugging in eclipse
从 ProjectA 我能够从 ProjectB 引用 ..\ProjectA\Assets。 在 Eclipse 上(至少在 Windows 下,我还没有在 Linux 上尝试过),我必须创建一个新变量来引用 ..\ProjectA 并在“链接文件夹位置”中使用该变量。如果我试图在“链接文件夹位置”中使用“..”,eclipse 不会接受它。
【讨论】: