在何处放置资产文件以供应用程序访问?

时间:2014-10-13 17:44:44

标签: android

最近获得了一些更新,即从Eclipse迁移到Android Studio并开始使用Gradle。此外,我的目标API已经从16更新到20,并且事情不像以前那样工作。

我开始重构我的应用程序的一部分,负责获取数据库文件。但LogCat报告application/app/assets目录中没有资源,(assetssrc目录处于同一级别),尽管我的dbfile.sqlite就在那里。

在检查时,我在资产中有以下几点:

AssetManager assetManager = getAssets();
String[] assetFile = assetManager.list("");

for (int i = 0; i < assetFile.length; i++) {
Log.d(PTAG, "Assets found [" + i + "]: " + assetFile[i]);
}

输出:

D/MainActivity﹕ Assets found [0]: images
D/MainActivity﹕ Assets found [1]: sounds
D/MainActivity﹕ Assets found [2]: webkit

没有关于数据库的事。你知道在哪里放我的数据库文件以及如何为它提供应用程序吗?

2 个答案:

答案 0 :(得分:0)

在传统的Android Studio项目中,资源位于assets/源集中的main目录中,或者位于其他源集中(如果适用)。因此,如果您的Android Studio项目在项目的app/模块中包含您的应用,则资产会进入app/src/main/assets/。然后,它们将与项目中其他源集的资源以及Android库项目提供的资源混合在一起,并将捆绑到您的APK中。

Here is a sample app使用SQLiteAssetHelper打包带有应用的数据库。它的数据库位于databases/内的app/src/main/assets/目录中。生成的APK具有您期望的数据库:

Android APK, Built By Android Studio, Showing Assets

SQLiteAssetHelper能够像您期望的那样获取资产。

请注意,此项目使用appcompat-v7(因此通过传递依赖项使用support-v4)。

现在,如果您愿意,可以将您的资产放在其他地方,但是您需要教Gradle在哪里找到它们。例如,my CWAC-RichTextUtils projectrichtextutils库的测试(在androidTest中)和单独的demo模块之间共享资产。我没有这些资产的两个副本,而是在项目级别有一个,我将每个模块的配置指向他们build.gradle文件中的那些资产:

sourceSets {
    main {
        assets.srcDirs = ['../testAssets']
    }
}

答案 1 :(得分:-1)

好的,女士们,先生们。我得到了答案。

如果您使应用程序向后兼容并从com.android.support导入库,请检查该文件夹中的子目录:您可能有appcompat-v7和/或support-v4。在这些目录中,您还会找到assets个文件夹:我的示例中的assetManager.list()引用它们。

长话短说:如果您打算在API 4和/或API 7中使用预定义资源,请确保将资产复制到com.android.support下的相应子目录。