Android 使用gradle打包Assets目录的案例

现在提起Android开发工具,大多人第一个想到的肯定是Android Studio。谷歌专门为Android开发者推出的这款IDE,以其强大的功能迅速击败的老牌的eclipse。

与此同时,eclipse依赖的ant,也逐渐被更加强大更加灵活的gradle所取代,成为Android开发领域首选构建工具。

强大并不意味着没有坑。在使用gradle的过程中,特别是打包assets目录 下的一些资源时,笔者真没想到你是这样的assets,遇到了若干问题,在此处做一个整理。

如何创建assets目录

老实说,笔者在这个地方真的吃过大亏。在eclipse时代,笔者创建assets目录时,习惯性地操作是“右键 -> new -> Directory”,然后只需将文件夹命名为“assets”即可。

到了Studio下,还是同样的操作,结果却有可能导致打包的apk中assets资源丢失了!!!所以习惯一定要改,Android Studio下assets目录正确的创建姿势是:

1 在你的src或者main目录上右键new;

2 在Folder菜单上找到Assets Folder,确定即可。

有个问题提一下,如果此时你的视图是Project,新创建的assets目录因为是空的,部分情况下会看不见(很诡异),这时你只需要将视图切换为Android,就能正常看见了。

assets目录无法打包进gradle

如果你的某些资源放置在assets目录下,本地编译能够正常访问,构建打包却死活读取不到的时候,建议你把打包生成的apk拿出来,将后缀改成zip,然后解压缩如下图所示,确定一下你的assets目录下的资源是否真的被打包进去了。提醒一下,不要试图修改里面的内容,都是验过签的。

如果没有,原因可能是你在创建assets目录时,并没有按照上面的流程,而且gradle的构建脚本里面也没有指明assets资源的路径,因此直接导致gradle懵逼。

解决办法有两个:

1 按照上面的流程重新创建assets目录;

2 在gradle里面android括号内,指定assets的路径即可,如

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

当然,需要根据你的具体情况来看,如果你为不同版本准备了不同的assets资源,就要添加在对应的flavors中。

assets目录下的同名文件

因为项目的需要,笔者要在assets目录下为不同的版本(360和demo)提供不同的资源。但是资源的名称也都是相同的。

笔者最初采取了在assets下创建文件夹对内容加以分类,同时配置不同Flavors的做法,如下图所示。

本以为万事无虞,结果却让人很无奈。

测试发现,这种方式并不奏效——assets目录仍然在main目录下,默认的仍然是一个文件夹(360或者demo)下的内容作为最终打包的资源,并没有根据版本区分开来。

后来采取的做法是在每一种版本(即每一种flavors)都创建一个assets目录,同时更改sourceSets,为每个Flavors提供不同配置,如下图所示,通过这样来区分不同的资源依赖,最后也证实可行。

总结一下

1 assets目录一定要按照正确的流程创建。如果不是正确的流程,一定要在gradle中指明它的路径;

2 assets目录的位置不受限制,可以随便指定,关键是gradles里面的路径;

3 src下默认的main目录是所有flavors共有的资源。每个flavors与main的资源只能够合并,不能替换;

4 为不同的falvors提供不同的assets资源时,assets资源一定要创建在每个flavors下;

5 配置资源的地方是sourceSets,在sourceSets中区分不同的flavors;而不是在productFlavors下区分不同的sourceSets。

补充:关于AndroidStudio assets目录的一些坑

1.新建assets目录

2.在Activity中加载assets目录中的图片资源到bitmap

InputStream inputStream= null;
try {
 inputStream = getAssets().open("timg.jpg");
} catch (IOException e) {
 e.printStackTrace();
}
bitmap= BitmapFactory.decodeStream(inputStream);

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。如有错误或未考虑完全的地方,望不吝赐教。

(0)

相关推荐

  • 详解Android Studio3.5及使用AndroidX的一些坑

    google的更新优化往往会牵动一大批开发者的心.去年的androidx,到今年studio3.5后都默认使用androidx了.其实对于我们开发者而言,我们都只是调用他的api,对我们的影响不大??!可是人性的习惯,还是比较不那么容易改变的.现在我就来说说我遇到的一些坑吧.话说还是很严重.不知道androidx的请自行百度. 一.我们从新建一个项目说. 3.5新建项目,是默认使用androidx的 看最后一样,Use androidx.* artifacts.而且不能取消掉的. 那么到我们项目

  • Android studio 添加assets文件夹的方法

    我们知道Eclipse创建的工程默认是有个assets文件夹的,但是Android studio默认没有帮我们创建,那么我们就自己创建一个就好啦. (1)手动创建 在项目的顶部有个下拉,默认选择的是Android, 但是在Android 模式下不能真实反映整个工程的目录结构,所以我们点击它在下拉选项中选择Project,选完之后目录发生了变化 我们找到/src/main,选中main文件夹右键新建一个文件夹,命名为assets,这样就OK了. (2)自动创建 Android studio提供了一

  • 深踩Android Studio 缓存的坑及解决方法

    本文记录的是今天在群里提到的昨天所踩的一个坑,有关 AndroidStudio 缓存的. 先说一下背景. 我负责的一个项目,对一个图表库有外部依赖.这个图表库是我在维护的,由于新功能在开发中,所以我就使用了 SNAPSHOT 版本发布到 OJO(oss.jfrog.org) 上.我在项目中刚更新了依赖,忽然想到还少几个 API,于是发布了 SNAPSHOT 版本. 故事就这样开始了. 这时候回到 AndroidStudio 再去 Sync Project with Gradle Files 肯定

  • Android 使用gradle打包Assets目录的案例

    现在提起Android开发工具,大多人第一个想到的肯定是Android Studio.谷歌专门为Android开发者推出的这款IDE,以其强大的功能迅速击败的老牌的eclipse. 与此同时,eclipse依赖的ant,也逐渐被更加强大更加灵活的gradle所取代,成为Android开发领域首选构建工具. 强大并不意味着没有坑.在使用gradle的过程中,特别是打包assets目录 下的一些资源时,笔者真没想到你是这样的assets,遇到了若干问题,在此处做一个整理. 如何创建assets目录

  • Android开发实现读取assets目录下db文件的方法示例

    本文实例讲述了Android开发实现读取assets目录下db文件的方法.分享给大家供大家参考,具体如下: 最近准备打算写一个关于天气预报的app,偶然的机会在一大神的博客上看到了一个获取天气的api,获取天气是通过城市的cityID,项目中准备通过读取weather_city.db数据库来查询cityID,这篇文章写怎么读取assets目录下的db文件,其实方法也挺简单的就是把assets目录下的db文件复制一份到"/data/data/" + packName + "/&

  • Android Studio下添加assets目录的实现方法

    有时候需要放置一些文件而且不被proguard压缩,可以放到assets目录中. 但是工程默认并未创建assets目录,那么如何在android studio中创建assets目录呢? 目录位置为:XXX\src\main\assets XXX代表你的项目的路径,assets放在src\main目录下. 以上这篇Android Studio下添加assets目录的实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们.

  • Android gradle打包并自动上传的方法

    简介 这篇文章主要介绍Android用gradle打包,并且调用python脚本将打包好的apk上传到fir.im供相关人员下载,对于学习gradle 打包和python 几个常用网络库有一定帮助 关键字 :Android Gradle Python fir.im 1 开发前准备 开发前需要下载 AndroidStudio ,gradle(3.3版本),python3.6,Curl,pycurl 准备fir.im账号一个,有账号对应的apitoken,具体fir.im的细节可查看文档fir.im

  • Android加载Assets目录中Xml布局文件

    最近由于项目开发使用到了动态布局,因为打包sdk ,sdk 这块activity 需要一些layout 文件 .而做过sdk 开发的小伙伴应该知道,layout 文件是不能打包到jar 中的.当然了aar 除外.由于项目使用的还是jar包,所以怎么解决layout文件是个问题,一开始想到的办法就是把layout 文件发给客户.但是这种方法显然不太合适后来就发现了Android 其实提供了一个方法可以加载xml布局文件,就是使用inflate(XmlPullParser parser, ViewG

  • Android eclipse使用gradle打包的图文教程

    1 . gradle 安装 1.1.下载安装包: https://gradle.org/releases 官方网站提供了最新以及历史版本,根据需求下载对应的版本.建议用最新的 1.2.解压到常用目录,此例放入D:\Program Files 1.3.配置环境变量,使得命令能够执行 1.4.检查安装配置是否正确.window系统下使用"gradle -v"命令查看,mac系统下使用"./gradlew -v"命令查看 2 2 . Eclipse 配置 2.1 .安装插

  • Android Studio gradle配置packagingOptions打包so库重复

    目录 正文 pickFirst 匹配 doNotStrip 设置 merge 将匹配的文件都添加到APK中 exclude 过滤 正文 在安卓开发中,通常会使用到gradle来编译,在安卓项目的app目录下的build.gradle中是用来对编译进行配置的,packagingOptions 是其中的一个打包配置,常见的设置项有exclude.pickFirst.doNotStrip.merge. 在日常代码开发中,我们需要知其然,而知其所以然,本文章知识也是Android日常瘦身的的必备知识.

  • android studio 3.0 gradle 打包脚本配置详解

    本文介绍了android studio 3.0 gradle 打包脚本配置,分享给大家,具体如下: 修改输出的名字 保存输出的文件路径 def fileArray = [] //遍历输出文件 android.applicationVariants.all { variant -> variant.outputs.all { output -> def outputFile = output.outputFile if (outputFile != null && outputF

  • 读写Android中assets目录下的文件的方法详解

    Android资源文件大致可以分为两种: 第一种是res目录下存放的可编译的资源文件: 这种资源文件系统会在R.java里面自动生成该资源文件的ID,所以访问这种资源文件比较简单,通过R.XXX.ID即可: 第二种是assets目录下存放的原生资源文件: 因为系统在编译的时候不会编译assets下的资源文件,所以我们不能通过R.XXX.ID的方式访问它们.那我么能不能通过该资源的绝对路径去访问它们呢?因为apk安装之后会放在/data/app/**.apk目录下,以apk形式存在,asset/r

  • Android读取assets目录下的所有图片并显示的方法

    本文实例讲述了Android读取assets目录下的所有图片并显示的方法.分享给大家供大家参考.具体方法分析如下: 在assets文件夹里面的文件都是保持原始的文件格式,需要用AssetManager以字节流的形式读取文件. 1. 先在Activity里面调用getAssets() 来获取AssetManager引用. 2. 再用AssetManager的open(String fileName, int accessMode) 方法则指定读取的文件以及访问模式就能得到输入流InputStrea

随机推荐