基本介绍

本文是针对android开发中的build.gradle文件中的常用配置总结,一些配置是在特定的场景下才使用,一些是为了解决一些问题才加上。所以默认还是使用在Android Studio工具中新建项目时生成的默认的build.gradle文件中的配置,等遇到了问题,再来加一些配置。

Read More

总结一下学习十来天go语言的成果,看了一遍语法之后,写了一个抓取HTML然后转换成PDF文件的程序,分享一下,代码点这里。代码在目前go的1.7.5版本和1.8版本上运行没有问题,据说go向下兼容,而不像swift。但发现有些比较老的资料上的代码,在新的go版本上看不到效果,比如打印地址%p,在新版本中必须得使用unsafe.Pointer(p)转换一下,否则格式化输出指针变量不会打印出内存地址。

其中使用了两个第三方库:

Read More

前段时间在应用中集成了华为推送,现在终于告一段落了,回首起来,发现一路踩的坑,都是泪啊。

先交待下集成华为推送的背景:由于android手机上的google官方的推送GCM在中国大陆基本是残废,而大陆有些手机厂商可能会干掉这部分,造成GCM推送基本不可用。而像小米、华为等手机厂商对android系统的ROM进行了深度定制,用户可以手机桌面直接将应用程序kill,即使有后台服务,都被会一起干掉,同时android新的版本为了改善手机续行,在6.0开始增加了Doze机制,无疑对推送又是一大打击。综合这些因素,决定选几种推送一起集成进来,其中就有针对华为手机的华为推送。

Read More

这几天遇到一个很奇葩的问题,终于解决了,记录一下。

问题场景是:用小米手机使用小米推送一条消息,然后点击通知栏中的消息启动应用,然后进入会话的Activity。应用启动后,如果当前界面不是会话界面,那么新消息会在通知栏显示消息提醒,然后点击会话消息后却进不了会话的Activity,即点击了通知栏通知后,系统都没有启动指定Activity的意思,没有看到系统启动Activity的Log,到是会看到系统处理这个Activity的影子。

Read More

  • 前几天在给一个同事讲&运算取变量的状态写法,原因是我看到他代码中这样写会产生问题,所以想纠正他一下,于是就跟他说你可以参考下android系统中View在measure时使用的状态是怎么通过&运算获取的。

  • 他也说这几个状态是与View在布局文件中设置width或height时,有个对应关系。就这个机会,深入的了解了下View的宽高的measure是怎么与android.view.View.MeasureSpec.EXACTLYandroid.view.View.MeasureSpec.AT_MOSTandroid.view.View.MeasureSpec.UNSPECIFIED这三种状态一一对应的。于是就有了下文。

Read More

  • 前几天在解决应用中一个问题,现象是在nexus 7.0以上系统的手机上创建群组会话时,消息发送超时。然后测试了一上,发现是必现的,而4.4系统的手机上却一切正常,于是一路分析了别人写的代码。最后找到原因并解决,于是就有了本文。

最后找到原因是在Android系统7.0以上,当把Activity的launchMode属性值设置为singleTop时,Activity的生命周期与以前的系统版本对应的生命周期有所不同。

Read More

android应用开发过程中,总会遇到一些坑。当遇到这些坑马上反应过来时,会很快解决。而没有反应过来时,估计是要折腾半天,下面记录一些这样的坑,防止自己遗忘再犯同样的错,自己以后再遇到类似的问题,也在这里记录下来。

Read More

这两天在集成微信支付的功能,先是客户在插件中集成支付功能,后来发现回调不起来,于是将支付功能集成到了主应用,然后暴露接口给插件使用。费劲几个小时的折腾,于是乎就有下文。

我们先来看下官网对于code为-1的说明(官网说明地址点这里):

1
开放平台配置的报名和应用签名是否一致:(android);确认是否使用正式的keystore打包apk并安装调试;(android);提交订单部分需要在服务器端完成。

先请仔细阅读,你遇到的问题就在这段描述中。其中注意,中间还错别字报名应为包名(鹅厂果然不一样)。

Read More

gradle在build混淆后的代码时,会出现如下错误提示:

1
2
3
4
5
6
7
8
9
10
11
12
13
Warning: there were 2 unresolved references to library class members.
You probably need to update the library versions.
Alternatively, you may have to specify the option
'-dontskipnonpubliclibraryclassmembers'.
(http://proguard.sourceforge.net/manual/troubleshooting.html#unresolvedlibraryclassmember)
Warning: Exception while processing task java.io.IOException: Please correct the above warnings first.
:app:transformClassesAndResourcesWithProguardForRelease FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':app:transformClassesAndResourcesWithProguardForRelease'.
java.io.IOException: Please correct the above warnings first.

Read More

在开发android应用时,一般都会用很多的第三方框架。有些框架会提供各个CPU的架构的SO库,比如arm、arm-v7a、x86、mips,有的甚至还提供64位的版本;而有的为了缩小应用包的体积只提供了一些常用的,比如arm,x86。如果应用中有的第三方框架提供了arm和x86的版本,而有的提供了arm,arm-v7a,x86三个版本,那么当运行在arm-v7a版本的CPU上,就会提示找不到只有arm和x86版本的SO库,这样很容易导致应用挂掉,报java.lang.UnsatisfiedLinkError错误,提示native方法找不到实现。

Read More

在使用android studio过程中,使用gradle编译的时候总会出现一些问题,下面是几个常见问题的解决方法。

  • 被编译的代码或资源有问题( finished with non-zero exit value 1):

出现这种编译异常表现是exit value 1,一般会给出错误提示,所以很容易排查。这种错误很常见,错误提示有时候是在日志中明显的给出来了,如下示例所示:

Read More

AndFix加载补丁包过程分析

andfix提供了一套可以热替换java中原有方法的工具,在实际应用中可以用来热替换修复出现bug的方法,从而使用应用不需要升级应用就能解决部分问题。

本文主要是分析运行在android应用中的一套工具环境,从java层到native层分析andfix框架热替换方法的过程。

Read More

apkpatch工具实现分析

apkpatch工具是配套阿里AndFix框架的一个生成aptach补丁包的工具,链接地址是:https://github.com/alibaba/AndFix/tree/master/tools 。主要包含反编译对比两个APK的类和方法、修改类名写入PACTH.MF文件、生成补丁apatch包。

由于没有从网上找到对应的源码,以下分析过程均通过jd-gui工具反编译jar包阅读反编译代码完成。

Read More

今天下午在调应用,突然Android Studio弹出Low disk space on a Android Studio system directory partition提示,磁盘空间不够了?赶紧跑去看了磁盘用量。傻眼了,早上来还有几百M的C盘,现在只剩下几十M了。早在之前就已经注意到了C盘容量会莫名的减少,但是没有注意是哪个程序占用了更多的空间,今天决定要找找,于是就有了下文。

1.二分法找出磁盘占用空间最大的目录

Win 7的应用程序缓存目录是在C:\Users\jacpy\AppData目录中,jacpy为当前系统用户名。AppData为隐藏目录,要在目录菜单的“组织”中找到“文件夹和搜索选项”的弹出框的“查看”Tab页中修改,不会修改也没关系,打开一个目录,把上面的路径直接copy到路径框里面,把用户名换成自己的电脑用户名,回车就行了。

Read More