在使用Android Studio 3.0.1时,构建中没有资产文件。

3

我的应用程序有一个样本数据文件,是私有类型的,自从它最初为Android 2.3构建以来就已经包含在其中。引用它的代码如下:

Resources res = mCtx.getResources();
AssetManager assMan = res.getAssets();

try {
    is = assMan.open(DB_SAMPLE);

    // stuff that copies to destination...
}
catch (IOException e) {
    stat = false;
}

Android Studio 3.0.1版本构建的问题是,assMan.open方法跳转到异常处理程序并显示“文件未找到”错误。资产文件夹和文件确实存在,并且根据类似问题的建议,我删除并重新创建了资产文件夹,并将文件复制回其中。在Project视图窗格中,“assets”文件夹直接位于“main”下面,并具有与“res”文件夹相同的图标。该项目现在针对SDK 26进行目标设置,但是在我尝试过的所有旧Android版本上都会出现此故障。
我是否需要执行特定操作才能使我的文件被识别,或者是否有其他变化?还是这只是一个错误?
问题已关闭:由于疏忽,没有尝试执行“Clean Project”操作,认为“Rebuild All”会包括此操作。现在资产文件夹已在APK中,一切正常运行。

3
在Android Studio中,使用APK分析器确认你的资源确实包含在APK中,并且没有被构建过程意外地删除。 - CommonsWare
实际上,在APK中没有资产文件夹,而在早期版本的Studio的APK中有。我这些天只是偶尔进行Android开发,所以最后一次可能是几个版本之前了。 - gordonwd
也许 assets/ 目录放错位置了(通常应该在 main/src/ 中),或者你的 Gradle 文件中有些东西告诉 Gradle 资源文件的位置不是标准位置。 - CommonsWare
很不幸,我不知道如何找到或修复这样的错误。我在想这是否可能是一个问题,因为几年前该项目开始针对Android 2.3(顺便说一下,是基于你的书),并已向上迁移到后续版本的构建工具。但在去年11月最后一次构建之前,它肯定是可以工作的,然后在12月底升级到最新的Studio。 - gordonwd
简直不敢相信我没有尝试过这个,但是在重新构建之前我忽略了对项目进行清理。这样做很有效,一切都好了,感谢您的时间(您真的是24/7在线还是有一个AI机器人提供答案?:-)。 - gordonwd
显示剩余2条评论
2个回答

4

不是第一次学到的经验教训:当你怀疑时,在重新构建发布之前,始终要进行清理项目。 "assets"文件夹已回到APK中。


1
这相当奇怪。虽然清理项目通常有助于解决代码或资源问题,但这是我第一次听说它可以解决资产问题。但是,我很高兴它对你有用! - CommonsWare

0

如上所述,有时在使用AS(Android Studio)进行多次构建后,一些资源文件(例如图像)会部分地复制到apk中, 然后在构建APK之前进行简单的清理项目应该可以解决这个问题,因为我可以从我的情况确认 enter image description here

正如您所看到的,在努力寻找为什么每次运行应用程序都会出现IO异常的原因时,我认为是代码的问题,但实际上是由于构建过程中缺少文件导致的

java.io.FileNotFoundException: V_Line.png 05-06 14:58:22.256 E/PTL_EmailSender( 3344): 在 android.content.res.AssetManager.openAsset(Native Method) 05-06 14:58:22.256 E/PTL_EmailSender( 3344): 中抛出异常

APK 文件缺少资源:

enter image description here

需要注意的是,AS 3.4.1在处理构建资源数据时并不是那么健壮可靠。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接