Android Webview H5资源本地化
Android Webview H5资源本地化
一. 创建读取资源项目独立模块
1. 项目依赖的好处
符合模块化的思想,他们相互独立。一个项目持有另一个项目的引用,修改更加方便。
(注:compile project编译引用的项目其内容必须包含有java代码、xml布局文件、AndroidManifest等,而且还要在项目的setting.gradle中用include的形式声明引用)
2. 操作步骤导入项目ProjectR
被依赖的项目ProjectR不需要任何改动!
1. 在需要使用的项目中的settings.gradle添加配置
include ':ProjectR'
project(':ProjectR').projectDir = new File(settingsDir,'../../ProjectR/')
include ':ProjectR:app'
2. 在需要使用的项目中的Module中添加需要引入的library
dependencies {
...
compile project(path: ':ProjectR:app')
...
}
3. 设置正确的被依赖的项目路径
project(':BProject').projectDir = new File(settingsDir,'../../ProjectR/')
其中 new File(settingsDir,'../../ProjectR/')
参数说明:
参数一: settingsDir 指的是相对于 settings.gradle 文件所在路径
参数二: 填写被依赖项目的路径,**../**表示上级目录,所以根据自己的路径修改
3. 坑(注意)
如果你不小心填错了被依赖项目的路径,而且还点了同步项目。那么可能会在Project和Module 目录下生成类似 xxx_xxx.iml 的文件,如果异常文件存在,后面就算你的路径配置正确也可能同步不成功,不断的提示错误。这是你只需要删除上叙文件同步项目即可。
4. Assets资源文件读取和AssetManager
AssetManager管理对assets文件夹资源的访问,它允许你以简单的字节流的形式打开和读取和应用程序绑定在一起的原始资源文件。主要用到list()及open()方法。
注意:要创建一个assets文件夹和java文件夹同级,然后再asset创建一个文件夹命H5Res,此句不要assets不然会找不到文件异常处理
InputStream stream = assetManager.open("H5Res/" + resUrl);
finalString[] list(Stringpath) 返回指定路径下的所有文件及目录名,path是相对路径,是assets子目录。
finalInputStream open(String fileName) 使用 ACCESS_STREAMING模式打开assets下的指定文件,fileName是相对路径,是assets子目录。
finalInputStream open(String fileName,int accessMode) 使用显示的访问模式打开assets下的指定文件。
5. ProjectR项目主要代码
import android.app.Activity;
import android.content.res.AssetManager;
import android.webkit.MimeTypeMap;
import android.webkit.WebResourceResponse;
import android.webkit.WebView; import java.io.FileNotFoundException;
import java.io.InputStream; public class LocalAssets{ private static LocalAssets _instance = null; public static LocalAssets getInstance() {
return _instance != null ? _instance : (_instance = new LocalAssets());
} private Activity mainContext = null; // 用于保存请求链接截取出的本地路径
private String resUrl = ""; /**
* 初始化此类获得上下文
*/
public boolean init(Activity context) {
mainContext = context;
return true;
} /**
* 拦截webview请求地址换成读取本地文件
*/
public WebResourceResponse doLoadRes(WebView view, String url) {
try {
// 根据url判断是否是需要加载的本地资源进行拦截替换响应资源
if (url === 'assets') {
AssetManager assetManager = mainContext.getAssets();
InputStream stream = assetManager.open("H5Res/" + resUrl);
WebResourceResponse response = new WebResourceResponse(
MimeTypeMap.getSingleton().getMimeTypeFromExtension(MimeTypeMap.getFileExtensionFromUrl(url))
, "UTF-8", stream
);
return response;
}
} catch (FileNotFoundException e) {
} catch (Exception e) {
e.printStackTrace();
}
return null;
} }
二. 主项目代码
1. 将需要本地化的资源放入assets/H5Res文件夹下。
2. 设置完webview后初始化导入的库:
LocalAssets.getInstance().init(this);
3. 设置webview拦截请求:
@Override
public WebResourceResponse shouldInterceptRequest(WebView view, String url) {
WebResourceResponse resp = LocalAssets.getInstance().doLoadRes(view, url);
if (resp != null) {
return resp;
}
return super.shouldInterceptRequest(view, url);
} @Override
@RequiresApi(Build.VERSION_CODES.LOLLIPOP)
public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {
WebResourceResponse resp = LocaalAssets.getInstance().doLoadRes(view, request.getUrl().toString());
if (resp != null) {
return resp;
}
return super.shouldInterceptRequest(view, request);
}
Android Webview H5资源本地化的更多相关文章
- Atitit.android webview h5运行环境总结
Atitit.android webview h5运行环境总结 1. WebView 的使用1 2. Js调用java1 3. Js调用java 跟个swt的比较2 3.1. Swt是BrowserF ...
- Android WebView H5开发拾遗
上篇介绍了一些WebView的设置,本篇为一些补充项. 首先加载HTML5的页面时,会出现页面空白的现象,原因是需要开启 DOM storage API 功能: webSettings.setDomS ...
- H5静态资源本地化实践
现在很多app都是通过webview内嵌H5的页面,这种方式的好处就是无需发版就能更新线上的内容,而且可以做到多平台的统一开发,节约开发成本.但是这种模式也带来了一定的问题,web开发很大程度依赖于网 ...
- H5 hybrid开发-前端资源本地化方案纪要
H5 hybrid-前端资源本地化方案纪要 就整个行业来说,大前端是趋势,现阶段,native方面除了一些偏CPU密集型工作与操作系统底层API方面的工作外,H5基本都可以满足需要. 目前的工作更偏向 ...
- Android WebView与H5联调技巧
版权声明:本文为xing_star原创文章,转载请注明出处! 本文同步自http://javaexception.com/archives/78 背景: 突然想写一篇关于Android WebView ...
- Android WebView 不支持 H5 input type="file" 解决方法
最近因为赶项目进度,因此将本来要用原生控件实现的界面,自己做了H5并嵌入webview中.发现点击H5中 标签 不能打开android资源管理器. 通过网络搜索发现是因为 android webvie ...
- Android原生和H5交互;Android和H5混合开发;WebView点击H5界面跳转到Android原生界面。
当时业务的需求是这样的,H5有一个活动商品列表的界面,IOS和Android共用这一个界面,点击商品可以跳转到Android原生的商品详情界面并传递商品ID: 大概就是点击H5界面跳转到Androi ...
- 原生+H5开发之:Android webview配置
在上一篇文章Android 原生开发.H5.React-Native开发特点,我们可以了解到三种Android开发方式的区别和优缺点.[Android开发:原生+H5]系列的文章,将主要讲解Andro ...
- Android WebView常见问题及解决方案汇总
Android WebView常见问题解决方案汇总: 就目前而言,如何应对版本的频繁更新呢,又如何灵活多变地展示我们的界面呢,这又涉及到了web app与native app之间孰优孰劣的争论. 于是 ...
随机推荐
- dp - 递推
C. Multiplicity time limit per test 3 seconds memory limit per test 256 megabytes input standard inp ...
- [LOJ#3022][网络流]「CQOI2017」老 C 的方块
题目传送门 定义有特殊边相邻的格子颜色为黑,否则为白 可以看出,题目给出的限制条件的本质是如果两个小方块所在的格子 \(x\) 和 \(y\) 为两个相邻的黑格,那么 \(x\) 和 \(y\) 之间 ...
- 源码的说明 ASP.NET MVC 5框架揭秘.zip
第1章 S101 MVP(SC)模式中Presenter与View之间的交互 S102 迷你版的ASP.NET MVC框架 第2章 S201 通过路由实现请求地址与.aspx页面的映射 S202 基本 ...
- Creating Custom Helper Methods 创建自定义辅助器方法----辅助器方法 ------ 精通ASP.NET MVC 5
创建内联的辅助器方法 和 拓展方法 好像类似的功能. 不过写在前台更直观
- BZOJ 2095 Bridges
题目传送门 分析: 首先就是二分 然后... 混合图欧拉回路是sm... 看了题解Orz 首先要回到原来的点的话,那么每个点入度和出度要相等... 这..和网络流进入点之后就出去不是一样的吗.. 又由 ...
- HTML中CSS引用——选择器的使用
一.元素选择器 1.书写格式:标记名{/*生命块*/} 2.所有与该标记匹配的元素,都将应用声明块中的规则 二.类选择器 1.书写格式:.类名{/*声明块*/} ...
- JS-08-对象
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- laravel 学习笔记 — 神奇的服务容器
2015-05-05 14:24 来自于分类 笔记 Laravel PHP开发 竟然有人认为我是抄 Laravel 学院的,心塞.世界观已崩塌. 容器,字面上理解就是装东西的东西.常见的变量.对象属 ...
- springIOC源码接口分析(三):ApplicationContext
一 新增方法 主要都是获取容器基本信息的一些接口,比如获取名称,id和启动时间戳,获取AutowireCapableBeanFactory等接口 二 继承接口 ApplicationContext继承 ...
- 微信小程序 客户端时间 与 服务端时间
服务端时间 db.serverDate(); 在操作数据库,上传数据的时候可以使用服务端时间 wx.cloud.init();//初始化云 const db = wx.cloud.database() ...