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

前几天开发一个类似微信搜索显示搜索结果分类展示的功能,很自然的联想到了使用ListView去展示最后搜索的结果。每个分类最前面要显示一个分类的标题,就想使用getItemViewType()getViewTypeCount()这两个方法做展示效果,结果在搜索过滤条件刷新Adapter的列表时,发生了以下错误:

Read More

前几天给博客增加评论功能,测试OK后准备将生成的文件提交到github,执行hexo deploy命令时报如下错:

1
2
3
bash: /dev/tty: No such device or address
error: failed to execute prompt script (exit code 1)
fatal: could not read Username for 'https://jacpy.github.com': No error

Read More

在做android SQLite数据插入性能优化时,前面一篇android SQLite性能优化(一)——使用事务和预处理提到了使用事务和预处理做优化,本篇介绍使用NDK的方式进行数据插入优化。
使用NDK操作数据库时,需要使用sqlite的官方源码,我这里测试使用的是官方的3.8.7.4版本的代码。同样在使用sqlite操作数据库时使用了事务和预处理。

Read More

老大交给了一个任务,其他项目组在应用初始化时,需要从服务器下载通讯录,然后插入到本地数据,由于数据量比较大,整个插入过程非常耗时,看我能不能优化一下。于是就有了下文。

SQL执行性能影响从根本原因上不外乎以下几种情况:

1.CPU执行时间;

2.存储器读写时间;

3.网络传输消耗。

Read More