Mono Android WebView 应用初体验[Updated]
作者:V君 发布于:2017-2-16 20:38 Thursday 分类:折腾手记
Hybrid App 这个技术诞生的时间很早, 到现在已经颇为成熟.
虽然略有所闻, 也在 Windows forms 上面用 CEF 玩得很溜, 但还是没去实际接触开发.
由于最近有想折腾的玩意儿, 况且公司在不久之后有需要做APP的可能.
就开始去接触吧!
略去安装开发环境的过程, 打开 VS2015. (当然要用我大井来写, 做什么都要用我大井才爽啊)
首先新建 WebView 项目, 然后观察.
和常见的 Android 项目一样, 也见到了熟悉的 Assets Resources MainActivity 这些玩意儿.
不过多了 Models 和 Views 这两个文件夹.
MainActivity 的模板初始化代码也从按钮事件处理, 替换成了 WebView 视图初始化.
还没来得及纠结如何实现页面与原生功能交互时, 已经能看到模板类 HybridWebViewClient 了.
虽然方式有点土, 只能通过请求拦截来实现调用原生代码.
但这已经满足了 APP 开发的最低要求.
那问题来了: (挖掘机哪家强) 跑在手机应用的网页要怎样调试脚本呢?
我们知道 Chrome 的 F12 很好用, 但 APP 能这样整吗?
答案是可以! 咕狗关键字 Android Web View Debug 第一条就找到了官方文档.
官方文档也是先 TL;DR 地列出3个粗略的步骤, 然后再对其逐一详细解释.
1) 启用 WebView 调试属性.
2) 开个Chrome浏览器访问 chrome://inspect 这个 URI.
3) 在页面上列出的视图列表上找到你的应用对应视图, 点击 inspect 链接.
山口山! 一个 F12 工具蹦出来了! 鼠标在元素列表上划过, 手机端视图也和浏览器一样高亮!
整个就像是 Chrome的 F12 一样! (´∀((☆ミつ 本来这就是 Chrome 的 F12!
初体验结束. 接下来可以愉快地写 APP 辣!
Update:
发现要做到这样调试还有一个前提, 也就是需要科学咳咳. 不信你就看 → git/issues
在另一台机做了同样操作,发现白屏了,咕狗一下才知道原来只要这样搞.
因为一直都有自动电梯, 所以没察觉到有这要求...
标签: 软件开发 调试技术 移动端 Android HybridApp
解决Win7更新服务(wuauserv)占用过多内存和CPU——总算治好顽疾
作者:V君 发布于:2017-1-30 15:12 Monday 分类:折腾手记
TL;DR: 安装这两个补丁(KB3050265)(KB3102810)然后重启.听我扯扯:
一直都被这个问题困扰着。
Windows 7更新服务一旦犯病就会变得很占内存和CPU。
内存小的机器就会因为交换虚拟内存耗尽IO,把各种操作响应变慢,导致整个体验变得很糟糕。
只能通过手动停止其服务才能消停一阵子。又不能把更新服务彻底禁用。。。
今天帮人重装系统,打补丁时就犯这毛病了,全新的系统也闹这样,真受不了。
咕狗,找到了这个帖子。然后药到病除!快来点赞!
C语言宏define定义与typedef差别之我见
作者:V君 发布于:2016-12-8 12:26 Thursday 分类:折腾手记
TL;DR
宏定义只是简单文本替换,以下例子将能体现与typedef的差别
#define pin int *
pin a,b;
上述代码展开为 int *a,b; 中只有a是指针, 而b不是.
将定义改成 typedef pin (int *) 就能让上面的代码如同看起来的一样了.
扯扯:
最近有空就折腾移植Mono到PSV, 途中遇到不少C语言基础知识.
碰巧又看到这篇讲述宏define的文章. 这才悟出两者的差别
移植eglib到VitaSDK,为Mono做准备[update]
作者:V君 发布于:2016-12-4 4:33 Sunday 分类:折腾手记
TL;DR
./autogen.sh --prefix=$VITASDK
./configure --host=$TARGET
make
按编译错误修改源代码, 然后跑跑看有没有问题.
听我娓娓道来:
由于受够了Windows的仿Linux环境Cygwin/Msys带来的各种问题
从上次开始就主要在 Debian Linux (amd64) 下进行主要编译流程.
1) 准备VitaSDK
依然是去HENKaku网站看向导文档, 这次和上次略有不同
这回咱们用的是 prebuilt toolchain
下个 tar.bz2 压缩包放进 /usr/local 执行 tar -jxvf 解压,里面已经有 vitasdk 文件夹
每次编译之前设置好以下环境变量就完成了SDK的准备
export PATH=/usr/local/vitasdk/bin:$PATH
export VITASDK=/usr/local/vitasdk
export PREFIX=$VITASDK
export TARGET=arm-vita-eabi
2) 获取源代码
复制 Mono 源代码中的 eglib 文件夹出来, 另外找地方放, 接下来咱们要对其进行交叉编译
3) 配置与编译
进入上一个步骤的地方, 走TL;DR的3个命令
4) 针对编译错误修正
和上次的定下小目标遇到的情况一样, 第一个问题是 gdir-unix.c
换成 sceIo 系列方法,参照VitaShell源代码修改即可编译通过, 具体可以参考本例的做法
5) 调试与测试
由于时间问题,本次只通过了库编译,并没有放到具体实例里调试. (´∀((☆ミつ
从 SDK示例 中的 debug_print 复制一份改名为 debug_print_eglib
进入目录, 修改 Makefile
输出名和项目标题及ID
编译参数 添加eglib的src作为include目录
链接参数 增加库目录和库名
在 main.c 里试着引用 glib.h 调用一下 gdir_unix.c 里面的函数
然后执行 make 编译, 就会发现缺少p线程库的符号,去对应github抓个zip回来
进入 platform/vita 执行make 就能在当前目录生成 a 文件, 加到示例的 Makefile
编译通过后就能跑起来了, 已确认本例的以下函数能够跑起来
- g_dir_open
- g_dir_read_name
- g_dir_close
- g_mkdir_with_parents
其中 g_dir_rewind 就不跑了. 无非是关闭句柄再打开, 用来重置目录指针.
本例修改完的 main.c 贴出来了, 咱是C语言新手,不要太吐槽哇!
看看接下来接着移植哪个库吧 >.<
修改Mono源代码,改变mscorlib库目录
作者:V君 发布于:2016-12-3 23:49 Saturday 分类:折腾手记
TL;DR:
一共改了两处地方, 都在 assembly.c
1) mono_set_rootdir(void)
把 installdir,root,config 这几个标识符干掉
将 bindir 直接喂给 mono_set_dirs 的两个参数
2) mono_assembly_load_corlib(const MonoRuntimeInfo *, MonoImageOpenStatus *)
修改 mono/<version> 路径拼接
corlib_file = g_build_filename("", "mscorlib.dll", NULL);
听我扯扯:
上次咱总算是把Mono编译成功了, 也初体验了嵌入Mono的运作方式.
不过略为不爽的是它只能从 ..\lib\mono\4.5\ 来加载 mscorlib 库.
啃了源代码才发现有写死的策略...
以及从被运行的程序集中取得Framework版本最终拼出mscorlib的路径.
由于咱是用嵌入mono,并且已明确Framework版本, 就不用管太多
改完TL;DR的两处就能加载当前目录下的mscorlib了, 但是如果当前目录下没有mscorlib
得到的提示仍然是之前的目录, 因此最好也改一下 domain.c 的 mono_init_internal
找到字符串 The assembly mscorlib.dll was not found or could not be loaded
然后修改下一行的提示就可以了, 咱的做法是 把标识符 corlib_file 干掉, 改成
g_print ("It should in same directory.\n"); 这样就能准确提示了.
blogger
Google Web Translator
热门日志
随机日志
最新日志
最新评论
- V君
@Quartz:(出现)... - Quartz
怎么不见人了呢... - V君
@Soar:DHCP 协议相... - V君
@Soar:当然是非... - Soar
@V君:谢谢 有空... - Soar
搞一个 1230v3+B85... - V君
@Soar:另外,也可... - V君
@Soar:iscsi服务端... - Soar
难怪这么卡,尤其... - Soar
clone了源码,提示...
分类
存档
- 2024年5月(1)
- 2023年7月(1)
- 2023年5月(1)
- 2022年11月(1)
- 2022年10月(1)
- 2022年9月(1)
- 2022年8月(1)
- 2022年7月(1)
- 2022年6月(1)
- 2022年5月(2)
- 2022年4月(1)
- 2022年3月(1)
- 2022年2月(1)
- 2022年1月(1)
- 2021年12月(1)
- 2021年11月(1)
- 2021年10月(1)
- 2021年9月(1)
- 2021年8月(1)
- 2021年7月(1)
- 2021年6月(1)
- 2021年5月(1)
- 2021年4月(1)
- 2021年3月(1)
- 2021年2月(1)
- 2021年1月(1)
- 2020年12月(1)
- 2020年11月(1)
- 2020年10月(2)
- 2020年9月(1)
- 2020年8月(1)
- 2020年7月(1)
- 2020年6月(1)
- 2020年5月(1)
- 2020年4月(2)
- 2020年3月(3)
- 2020年2月(1)
- 2020年1月(1)
- 2019年12月(1)
- 2019年11月(1)
- 2019年10月(1)
- 2019年9月(1)
- 2019年8月(2)
- 2019年7月(1)
- 2019年6月(1)
- 2019年5月(1)
- 2019年4月(1)
- 2019年3月(1)
- 2019年2月(1)
- 2019年1月(2)
- 2018年12月(2)
- 2018年11月(1)
- 2018年10月(3)
- 2018年9月(4)
- 2018年8月(6)
- 2018年7月(4)
- 2018年6月(1)
- 2018年5月(2)
- 2018年4月(2)
- 2018年3月(3)
- 2018年2月(1)
- 2018年1月(1)
- 2017年12月(1)
- 2017年10月(2)
- 2017年9月(1)
- 2017年8月(2)
- 2017年7月(1)
- 2017年6月(5)
- 2017年5月(2)
- 2017年4月(2)
- 2017年3月(3)
- 2017年2月(2)
- 2017年1月(2)
- 2016年12月(3)
- 2016年11月(2)
- 2016年10月(3)
- 2016年9月(4)
- 2016年8月(2)
- 2016年7月(4)
- 2016年6月(3)
- 2016年5月(1)
- 2016年4月(4)
- 2016年3月(3)
- 2016年2月(1)
- 2016年1月(5)
- 2015年12月(4)
- 2015年11月(5)
- 2015年10月(1)
- 2015年9月(6)
- 2015年8月(4)
- 2015年7月(1)
- 2015年6月(6)
- 2015年5月(3)
- 2015年4月(3)
- 2015年3月(2)
- 2015年2月(1)
- 2015年1月(3)
- 2014年12月(1)
- 2014年11月(1)
- 2014年10月(1)
- 2014年9月(3)
- 2014年8月(1)
- 2014年7月(1)
- 2014年6月(1)
- 2014年5月(3)
- 2014年4月(1)
- 2014年3月(1)
- 2014年2月(2)
- 2014年1月(1)
- 2013年12月(2)
- 2013年11月(2)
- 2013年10月(1)
- 2013年9月(3)
- 2013年8月(14)
- 2013年7月(7)
- 2013年4月(1)
- 2013年3月(4)
- 2013年2月(6)
- 2013年1月(6)
- 2012年12月(8)
- 2012年11月(6)