Android 使用gradle打包Assets目录的案例
作者:丑旦 发布时间:2023-08-05 22:29:45
现在提起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);
以上为个人经验,希望能给大家一个参考
来源:https://blog.csdn.net/luochoudan/article/details/72081858


猜你喜欢
- @PathVariable接收两个参数首先@PathVariable无法接收对象,但是可以接收多个值var data = obj.data;
- 在Google I/O 2017中,Google 宣布 Kotlin 成为 Android 官方开发语言。为什么选择 Kotlin? 简洁:
- C#中保存Session的三种方法及Web.Config设置保存session到sql server;,需要指定Sql Server;服务器
- 本文以eclipse4.7安装sts3.9.0为例,解决报错An error occurred while collecting items
- 一、猜想数据存放路径微信现在是老少皆宜,大街小巷都在使用,已经替代了传统的短信聊天方式了,只要涉及到聊天就肯定有隐私消息,那么本文就来讲解如
- MyBatis根据条件批量修改字段背景:给学生改作业,只要是对的都批量进行数据库的修改代码以及注释conttoller@RestContro
- 在C语言中,函数名可以当做函数指针传递给形参从而实现回调void f1() { printf("f1()\n"); }v
- 本文实例讲述了Android之复选框对话框用法。分享给大家供大家参考。具体如下:main.xml布局文件<?xml version=&
- 配置步骤:1.导入Spring整合Junit的jar(坐标):<dependency> <gr
- 通常C#使用基于XML的配置文件,不过如果有需要的话,比如要兼顾较老的系统,可能还是要用到INI文件。但C#本身并不具备读写INI文件的AP
- 最近公司的一款产品提交国内市场,发现有些国内市场提示需要进行应用认领。原因就是别人(或者市场抓取)已经在我们之前将这个应用提交到了该市场。认
- 可编程的配置方式-1如果在配置cfg.xml的时候,不想在里面配置hbm.xml怎么办呢?可在程序里使用可编程的配置方式,也就是使用程序来指
- 本文实例讲述了Android开发实现的简单五子棋游戏。分享给大家供大家参考,具体如下:我刚刚在Android上写的一个五子棋的小程序,在这里
- 记得老师讲课的时候,经常会用PPT遥控翻页笔来遥控幻灯片来给我们讲课,当时觉得非常有趣,由于这段时间接触了VSTO相关的开发,了解到了Off
- 服务降级服务压力剧增的时候,根据当前的业务情况及流量对一些服务和页面有策略的降级,以此缓解服务器的压力,以保证核心任务的进行。同时保证部分甚
- 本文实例为大家分享了C#实现学生成绩管理系统的具体代码,供大家参考,具体内容如下C#作业 用循环结构/数组实现进入启动页面管理员身份登入用户
- 首先看两段代码,一段是Integer的,一段是AtomicInteger的,为以下:public class Sample1 {  
- 前言我们从以下几个方面研究:SpringBoot的启动依赖启动器starter有什么作用启动引导类是怎么运行的内置的tomcat服务器原理p
- 一、前言先使用一个模板图片,在图片上添加图片或者文字都可以。二、依赖<dependency> <
- Interval操作符:用于创建Observable,跟TimerTask类似,用于周期性发送信息,是一个可以指定线程的TimerTask首