Category Archives: Android

Android使用Google Analytics v4黑屏

一开始不黑的,后来不知道怎么回事就频繁导致应用黑屏,无响应。网上一搜,发现个这个:

https://productforums.google.com/forum/#!category-topic/analytics/report-bugs/RAgDNYFk6jo

GA as bundled in 6.5.87 is blocking at:
GoogleAnalytics.getInstance(context)
causing ANRs.

Google的回复是

This issue should be fixed in the latest version of Play Services now.

实际上呢?毛都没有,SDK Manager里的最新版就是6.5.87。

Stackoverflow上有人用反编译分析了一下:http://stackoverflow.com/questions/27447805/random-black-screen-when-launching-android-app-on-device

结果是Google的代码有问题,造成了死锁。解决办法是从AndroidManifest文件中移除那个指定tracker xml的meta项。

Google在这种问题上犯错、被人report还不修复,我也不知道说什么好了。


更新一下,今天又发现一个问题,Google的License Check在5.0下会导致应用崩溃,为什么自己的库都不测试好就发出去了呢。。。

https://code.google.com/p/android/issues/detail?id=78505

Fragment’s savedInstanceState is always null.

First of all, only fragment killed by system will call onSaveInstanceState() function because of reasons like OOM. Thus, fragment killed by activity’s finish() will not call onSaveInstanceState(). In this situation, it’s better to preserve the state in onPause().

Secondly, in onSaveInstanceState(), one must call super.onSaveInstanceState() at the end of the implemented function.

Thirdly, the fragment should have an TAG or ID associated with it. The best practice is to declare tag in xml or when dynamically adding fragment, use the add() function with tag argument.

Android开发中Java库依赖出现ClassDefNotFound问题

昨天在做一个Android的开发的时候,出现了我从来没遇到过的库依赖问题,网上搜索了半天也没有答案,最后发现原因竟然非常简单,记录于此。

我的Android应用Project1,依赖于另外一个纯Java的项目Project2,我在Build Path里配置好了项目依赖,Eclipse本身也没有报什么异常,但是一到真机上调试的时候,就出ClassDefNotFound的问题,看上去是依赖出了问题。

StackOverflow上的答案没有一个能解决我的问题。我突然想到,Eclipse能正常进行代码提示,说明依赖是对的,只是在Android上跑不起来而已。我立马去检查Project的Java Level,果然是Java 7的缘故。把Compile Level调整到Java 6之后,一切正常。

百度地图Android SDK无法定位的解决办法

最近在使用百度地图安卓API的时候发现一个问题,有一段定位的代码无法进行定位。这个问题很奇怪,因为在整个应用的其它部分也有调用定位的代码,都能够成功定位,但是惟独这里不行。

先简单介绍一下程序的设计,我们在界面上有一个按钮用于选择位置,点击按钮后会弹出一个对话框选择是在地图上选点还是自动定位当前位置,如果点了定位当前位置就会自动进行定位。

经过反复检查之后才发现问题的所在:传入定位函数参数的Context对象有问题。一般来说这种情况下我们都会把含有按钮的Activity作为Context对象参数传入,很不幸在弹出对话框之后,这个Context就已经失效了,所以百度地图才会无法定位。

解决的方法也很简单,直接传入全局Context即可,例如getApplicationContext()。

Android百度地图SDK开发出现Exception Ljava/lang/UnsatisfiedLinkError; thrown while initializing Lcom/baidu/mapapi/BMapManager 错误

之前和同学一起做Android的地图应用开发,用到了百度地图的SDK。但是很奇怪的事情是,在同学的电脑上一切正常,但是在我的电脑上死活就跑不起来,显示

Exception Ljava/lang/UnsatisfiedLinkError; thrown while initializing Lcom/baidu/mapapi/BMapManager

这实在是太诡异了。由于我们使用的Eclipse版本不同,我用的是ADT 22,他用的是更早的,我一度怀疑是IDE的问题,然而按照百度官方文档修改项目配置后,依然报同样的异常。

为了解决这个问题,我上网搜索资料,http://longquan.iteye.com/blog/1583167 这篇文章给了我启发。我开始一样一样检查问题的原因,最后惊讶的发现armeabi文件夹下竟然缺少so文件!

这是怎么回事?为什么我的同学能正常运行呢?仔细检查之后我才发现是SVN惹的祸,我们的so文件压根就没有出现在版本库中,之所以会这样因为*.so文件是SVN客户端默认忽略的文件类型。

知道了原因接下来就好办了,在SVN的setting中取消so文件类型的忽略,然后重新commit和update一次,就成功运行了!