android N 移除 webview

由于项目需要,需要裁剪ROM,由于webview在新项目中是不必要的,所以有了想法对他下刀。

跟移除其他模块一样,这里采取的措施是将build/target/product/core_minimal.mk中
PRODUCT_PACKAGES +=webview屏蔽,这样重新编译就不会编译webview相关的模块了,可以在镜像编译后进入到out目录查看一下,可以看到webview文件夹没有了

这里写图片描述

很happy的进行到这没有什么毛病,然后开始烧录镜像。于是如预期一样的挂了,打印信息如下(由于编排问题,这里直接上异常截图):

这里写图片描述

根据log,我们马上定位到报错,在Zygote起来的时候,preload操作出现了问题,那这里我们已经移除了webview模块,那么肯定是不需要这个preload操作的,直接屏蔽,然后重新编译,烧录镜像。再次开机,上面那个异常已经没有了,但是又出现了新的问题

这里写图片描述

system_server神奇的结束了,然后Zygote起不来,最奇葩的是没有其他相关异常log的打印,一顿怀疑人生,然后我在没有裁剪的环境下,进入system目录,执行了下如下命令

这里写图片描述

屏蔽PRODUCT_PACKAGES +=webview,实际上会将与webview相关的so也移除,之前libwebviewchromium_loader.so移除导致了Zygote起不来,那么是不是libwebviewchromium_plat_support.so移除也会引出异常呢,带着疑问我将正常的libwebviewchromium_plat_support.so重新push到机器里,开机成功了。。。于是没说的,直接在源码中查找一下与这个so相关的东西

这里写图片描述

熟悉安卓N的应该知道,public.libraries.android.txt最后会编译成system/etc/public.libraries.txt,用以标识应用能够引用到的system目录下共用的so。对于不在这个清单中的so引用会出现异常,

java.lang.UnsatisfiedLinkError: dlopen failed: library “xxx.so” not found 或
java.lang.UnsatisfiedLinkError: dlopen failed: library “/vendor/lib64/xxx.so” needed or dlopened by “/system/lib64/libnativeloader.so” is not accessible for the namespace “classloader-namespace”

具体可以参考这篇博客的介绍 Framework基础:Android N 公共so库怎么定义呢?

将system/core/rootdir/etc/public.libraries.android.txt中的libwebviewchromium_plat_support.so删除后,再重新编译并运行,没有异常,webview移除成功

### 移除 Android WebView 中播放视频时显示的下载按钮 为了防止在 `WebView` 播放 HTML5 视频时出现下载按钮,可以采取以下措施: #### 修改 User-Agent 字符串 通过修改 `User-Agent` 字符串来模拟不同的浏览器环境,某些网站会根据 User-Agent 来决定是否展示特定的功能或按钮。 ```java WebSettings webSettings = webView.getSettings(); webSettings.setUserAgentString("Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Mobile Safari/537.36"); ``` #### 使用 JavaScript 注入拦截下载请求 可以通过自定义 `WebChromeClient` 和 `WebViewClient` 来监听并阻止下载行为。对于一些基于 `<video>` 标签的内容,可以在加载页面之前注入一段 JavaScript 脚本来禁用右键菜单以及隐藏默认控制栏上的下载图标。 ```javascript // Java端代码 webView.setWebViewClient(new WebViewClient(){ @Override public void onPageFinished(WebView view, String url){ super.onPageFinished(view,url); // 启动JavaScript脚本移除下载按钮 webView.loadUrl("javascript:(function(){" + "var videoTags=document.getElementsByTagName('video');" + "for(var i=0;i<videoTags.length;++i)" + "{videoTags[i].setAttribute('controlsList','nodownload');}" + "})()"); } }); ``` 此段 JavaScript 遍历所有的 `<video>` 元素,并设置其属性 `controlsList="nodownload"`,从而达到关闭下载选项的效果[^1]。 另外需要注意的是,部分在线媒体平台可能采用更为复杂的机制保护版权内容,例如使用 iframe 嵌套或其他形式的安全策略,这些情况下简单的 DOM 操作或许并不能完全解决问题。针对这种情况,建议开发者关注目标站点的具体实现细节,必要时联系对方 API 接口获取合法授权访问资源的方式[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值