最近获得了一些更新,即从Eclipse迁移到Android Studio并开始使用Gradle。此外,我的目标API已经从16更新到20,并且事情不像以前那样工作。
我开始重构我的应用程序的一部分,负责获取数据库文件。但LogCat报告application/app/assets
目录中没有资源,(assets
与src
目录处于同一级别),尽管我的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
没有关于数据库的事。你知道在哪里放我的数据库文件以及如何为它提供应用程序吗?
答案 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具有您期望的数据库:
SQLiteAssetHelper
能够像您期望的那样获取资产。
请注意,此项目使用appcompat-v7
(因此通过传递依赖项使用support-v4
)。
现在,如果您愿意,可以将您的资产放在其他地方,但是您需要教Gradle在哪里找到它们。例如,my CWAC-RichTextUtils project在richtextutils
库的测试(在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
下的相应子目录。