Android Studio开发组件化App遇到的问题

由于项目需求,需要开发组件化App,开发过程中遇到些问题,特此记录,以防再遇。

Q1

Compilation is not supported for following modules: module1, module2, module3. Unfortunately you can’t have non-Gradle Java modules and Android-Gradle modules in one project.

提示以上信息,当然其中的module1, module2, module3是我举例,实际会报告项目中的mudule的名字。

Solution 1

Then you should go to File -> Invalidate Caches / Restart -> Invalidate Caches & Restart.

Then try to build the application again.

Solution 2

Click on the button:Sync Project with Gradle Files

Solution 3 (helpful for me)

1- close the project

2- close Android Studio IDE

3- delete the .idea directory

4- delete all .iml files

5- open Android Studio IDE and import the project

node.js调试

一般我们在调试javascript代码时常用的调试方法有:console日志和借助浏览器断点调试。

今遇到要调试node.js。Nodejs提供了一个内建调试器来帮助开发者调试应用程序。想要开启调试器我们需要在代码中加入debugger标签,当Nodejs执行到debugger标签时会自动暂停(debugger标签相当于在代码中开启一个断点)。

先看下几个命令的 说明:

Stepping

  • cont, c - Continue execution 继续执行,直到遇到下一个断点
  • next, n - Step next 单步执行
  • step, s - Step in 单步执行并进入函数
  • out, o - Step out 从函数中步出
  • pause - Pause running code (like pause button in Developer Tools)

Breakpoints

  • setBreakpoint(), sb() - Set breakpoint on current line 当前行设置断点
  • setBreakpoint(line), sb(line) - Set breakpoint on specific line 在特定行上设置断点
  • setBreakpoint('fn()'), sb(...) - Set breakpoint on a first statement in functions body 在函数f的第一行设置断点
  • setBreakpoint('script.js', 1), sb(...) - Set breakpoint on first line of script.js 在 script.js 的第20行设置断点
  • clearBreakpoint('script.js', 1), cb(...) - Clear breakpoint in script.js on line 1 清除断点

Information

  • backtrace, bt - Print backtrace of current execution frame 显示当前的调用栈
  • list(5) - List scripts source code with 5 line context (5 lines before and after) 显示当前执行到的前后5行代码
  • watch(expr) - Add expression to watch list 把表达式 expr 加入监视列表
  • unwatch(expr) - Remove expression from watch list 把表达式 expr 从监视列表移除
  • watchers - List all watchers and their values (automatically listed on each breakpoint) 显示监视列表中所有的表达式和值
  • repl - Open debugger’s repl for evaluation in debugging script’s context 在当前上下文打开即时求值环境
  • exec expr - Execute an expression in debugging script’s context 在调试脚本的上下文中执行表达式

Execution control

  • run - Run script (automatically runs on debugger’s start) 执行脚本,在第一行暂停
  • restart - Restart script 重新执行脚本
  • kill - Kill script 终止当前执行的脚本

Various

  • scripts - List all loaded scripts 显示当前已加载的所有脚本
  • version - Display V8’s version 显示v8版本

参考网站:https://nodejs.org/api/debugger.html

https://www.cnblogs.com/axl234/p/6504336.htm

端口被占用,干掉它

这个问题遇到过好几次,起初是在开发Android是adb端口被占用,就连360都曾占用过;特此记录:

这次是 35729 被占用了,看操作:

1 . 查看占用端口的进程PID

1
netstat -ano|findstr 35729  # 35729是我这边被占用的端口,你根据自己的情况下而定。

输出如下:

1
2
3
4
5
6
E:\workspace\VSCode\three.js\Three.js-start (master -> origin)
λ netstat -ano|findstr 35729
TCP 0.0.0.0:35729 0.0.0.0:0 LISTENING 8084
TCP [::]:35729 [::]:0 LISTENING 8084
TCP [::1]:10082 [::1]:35729 ESTABLISHED 10804
TCP [::1]:35729 [::1]:10082 ESTABLISHED 8084

2 . 看到 35729 端口的 PID 是 8084,通过PID查看所有进程,看看谁在作祟

1
tasklist /fi "PID eq 8084"
1
2
3
4
5
6
E:\workspace\VSCode\three.js\Three.js-start (master -> origin)
λ tasklist /fi "PID eq 8084"

映像名称 PID 会话名 会话# 内存使用
========================= ======== ================ =========== ============
node.exe 8084 Console 1 98,516 K

3 . PID,干掉它:

1
taskkill /pid 8084 /f
1
2
3
E:\workspace\VSCode\three.js\Three.js-start (master -> origin)
λ taskkill /pid 8084 /f
成功: 已终止 PID 为 8084 的进程。

完工。

最初发布在 http://blog.sina.com.cn/s/blog_694394d30102wgxg.html

JS中apply()与call()的区别

JS中apply()与call()的区别

JavaScript中的每一个Function对象都有一个apply()方法和一个call()方法,它们的语法分别为:

1
2
3
4
5
/*apply()方法*/
function.apply(thisObj[, argArray])

/*call()方法*/
function.call(thisObj[, arg1[, arg2[, [,...argN]]]]);

前端调试之把玩console

Console 对象用于 JavaScript 调试。

JavaScript 原生中默认是没有 Console 对象,这是宿主对象(也就是游览器)提供的内置对象。 用于访问调试控制台, 在不同的浏览器里效果可能不同。

Console 对象常见的两个用途:

  • 显示网页代码运行时的错误信息。
  • 提供了一个命令行接口,用来与网页代码互动。

下载神器 you-get

在windows 上:

1 安装

  1. https://github.com/soimort/you-get/releases/latest下载,解压后在cmd中切换至目录下执行you-get即可

  2. 安装python,执行

    1
    2
    3
    $ pip3 install you-get #安装
    $ pip3 install --upgrade you-get #更新
    $ pip3 install --upgrade git+https://github.com/soimort/you-get@develop #更新

    https://you-get.org/

    github

    下载ffmpeg从ffmpeg.org并添加到PATH

  3. 即可在任意目录下使用you-get

2 用法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Usage: you-get [OPTION]... [URL]...

Startup options:
-V | --version 版本信息
-h | --help 帮助

Dry-run options: (no actual downloading)
-i | --info 列出所有可获取的视频信息
-u | --url 打印URLs的提取出信息,真实链接地址
--json 打印URLs的JSON格式

Download options:
-n | --no-merge 不合并分片
--no-caption 不下载其他文件(字幕,歌词,弹幕。。。)
-f | --force 覆盖存在的文件
-F | --format <STREAM_ID> 选择下载那种清晰度的视频
-O | --output-filename <FILE> 设置输出文件名
-o | --output-dir <PATH> 输出文件夹(相对位置可用,如:~/video/)
-p | --player <PLAYER [OPTIONS]> 将提取出的真实地址传给播放器
-c | --cookies <COOKIES_FILE> 导入cookies.txt或cookies.sqlite(firefox下使用export-cookies插件)
-x | --http-proxy <HOST:PORT> 使用HTTP代理下载
-y | --extractor-proxy <HOST:PORT> 仅对真实地址视频文件的下载使用HTTP代理
--no-proxy 不使用代理
-s | --socks-proxy <HOST:PORT> 使用SOCKS5协议代理
-t | --timeout <SECONDS> 设置代理的timeout
-d | --debug 显示traceback和其他的debug信息
-I | --input-file 仅下载链接的视频不下载列表

3 注意

默认情况下,下载最高清晰度视频
输入任意内容如:you-get “i love china” 可以从Google内搜索并下载视频,youtube-dl也有类似功能
bug地址:https://github.com/soimort/you-get/issues
-c和-p参数非常好用

[诗歌]千古岐山

千古岐山

​ 依依故乡情,乡情浓于酒。俺是在外的岐山人,偶回故乡,觉得2009中国·岐山周文化艺术节上的瞿玄和、凯丽的《千古岐山》诗朗诵令人感动,果断转了,以飨在外滴和在家滴岐山乡党们。

再见2018,你好2019

时光飞逝,2018,转眼已是过去,回首过去这一年,取得过成绩也有过不足,经过同事间的协作与共同努力,发现问题并解决问题。

2019,新的起点,新的希望。从事Android开发四余载,此时站在新的起跑点,更需要总结自己,继承并发扬过去工作中已形成的优点,汲取教训,摒弃不足以更清醒的头脑和奋发的姿态向未来目标迈进。

工作上

在刚过去的2018年里,公司移动端的项目仍然分为BIM以及教育两方面。

教育项目是自从我14年入公司以来一直参与并一直维护至今的一个项目,电子书包学生端,运行在Android pad上的一款移动端项目,18年,电子书包项目并没有太大的版本变更,大多都是性能上的优化以及bug的修复,并且成功在华为pad上申请了超级权签权限。

BIM项目是公司近几年新开设并且大力宣传与开发投入的项目。移动端从最初规划的4D App到5D App,期间有过两次大的版本变更。在4D App基础上的两个4D App 非标项目,5D App 上的一个非标项目,另有上海某院BIM App项目由另外的同事负责开发。

5月份时,将公司开发的BIM引擎进行了二次封装以便用于移动开发调用,并成功用于上海BIM项目中,在此基础上又开发出纯Kotlin开发的BIM 引擎演示App并一直维护并完善以便客户能依此更方便更便捷的基于我们公司引擎开发自己的BIM App。

在开发4D、5D app时,起初api 接口文档使用word书写,随着接口数越来越多,达到近百个时,word显得非常吃力,同时需要与IOS进行公网api对接,最终废弃word,采用gitbook管理,分类管理、目录清晰,可以部署到外网多方协同。

个人技能提升

2018年,除了提升自己Android方面的技能,还学习了新的开发语言Kotlin,谷歌公布Kotlin将作为官方开发语言起就不断地接触过这门语言,初期都是处于写个小demo的阶段,终于在18年下半年下定决心开发一款纯kotlin开发的应用,就是上面提到的演示程序。只能说用过才知道它(Kotlin)的好。

除了kotlin语言,还有Flutter、git、跨平台的Electron、Vue(刚入门)以及学习更高效的使用VS code、AS等开发工具。

闲暇的时间也会去翻翻简书、公众号、知乎(现在的知乎也没有以前好了)阅读一些很有意思的技术类软文,从中也会有很多启发。有时自己在工作中遇到一些问题解决了,并且觉得这些解决方案很有意义记录下便起笔写篇软文发到自己博客上。

未来规划

2019年,仍有很多需要学习提升,已经涉足的kotlin、flutter等还需要更进一步深入学习。

对于过去的得与失,我会汲取有利的因素强化自己的工作能力,把不利的因素在自己以后的工作中排除,一年的工作让我在成为一名合格的职工道路上不断前进,我相信通过我的努力和同事的合作,以及领导们的指导,我会成为一名优秀的员工,充分发挥我的社会能力,也感谢领导给我这一个合适的工作位置,让我能为社会做出自己该有的贡献。
一年来,我做的可能不是最好,但我相信在今后的工作中,仍会继续不断的努力。我相信,只要我在岗位上一天,我就会做出自己最大的努力,将自己所有的精力和能力用在工作上,相信自己一定能够做好!

本站总访问量 | 本文总阅读量