摘要:前几天在跑游戏引擎的时候,遇到了一个比较奇怪的问题,logcat不断地打印下面的错误: waitForCondition(LockCondition) timed out (identity=23, status=0). CPU may be pegged. trying again. 更为奇怪的是,机器完全不能响应,最终重启,而且是可以100%重现的。 测试的机器是Moto ME525(MIUI 2.3.7)。 经过排查,发现与FBO的使用有关,引擎中对FBO使用的大概逻辑是:@Overridepublic void onDrawFrame(GL10 gl) { ...
        
阅读全文
 
        
     
    
        
        
摘要:如果你使用VideoView播放过MP4视频,你可能碰到过类似下面的问题: MediaPlayer error (1, -2147483648) 如果你查阅文档,会发现1其实代表MEDIA_ERROR_UNKNOWN,不过文档对-2147483648(0x80000000)没有做什么说明,实际上它也是代表unknown error的意思。 真正的原因在于,MP4有多种编码格式,例如H.264,H.263等,而Android版本较低的机器只支持部分编码。 一旦遭遇不被支持的编码格式,MediaPlayer可能就会抛出上面的错误信息。 如果你也遇到这类问题,你可以使用一些...
        
阅读全文
 
        
     
    
        
        
摘要:转载自:http://blog.ready4go.com/blog/2013/05/18/resolve-android-ndk-warning-app-platform-android-14-is-larger-than-android-minsdkversion-8/使用ndk-build编译项目的时候会看到一个警告“Android NDK: WARNING: APP_PLATFORM android-14 is larger than android:minSdkVersion 8”,虽然”不怎么”影响结果,看着碍眼解决方法在项目里的jni/Application.mk文件里加入一行AP
        
阅读全文
 
        
     
    
        
        
摘要:有些时候,在你向连接好的Android机器中按照程序时会遭遇失败,logcat提示“unable to open sync connection”。 一般情况下,重启手机几乎肯定可以解决这个问题。 如果不方便重启手机的话,可以试试先关闭“USB调试”选项然后重新打开它,应该可以解决问题。 但是在一些极端情况下,重新设置“USB调试”选项并不能解决问题,下面是一个凑效的方法(需要root权限): 1.在手机上安装好“超级终端”这款软件。 2.在“超级终端”中运行"su"命令获得root权限。 3.运行"ps -ef | grep adbd"命令找到adbd
        
阅读全文
 
        
     
    
        
        
摘要:今天,当我将一个包含jni的Android工程从Windows电脑上拷贝到Ubuntu电脑上之后,编译它的时候出现以下错误: .../android-ndk/ndk-build clean Invalid attribute name: package .../android-ndk/build/gmsl/__gmsl:512: *** non-numeric second argument to `wordlist' function: ''. Stop. 问题的关键是:两台机器上的环境都是正常可用的,且工程在Windows下可以正常编译。 在网络上搜索一圈之后...
        
阅读全文
 
        
     
    
        
        
摘要:1.什么是WAL? WAL的全称是Write Ahead Logging,它是很多数据库中用于实现原子事务的一种机制,SQLite在3.7.0版本引入了该特性。 2.WAL如何工作? 在引入WAL机制之前,SQLite使用rollback journal机制实现原子事务。 rollback journal机制的原理是:在修改数据库文件中的数据之前,先将修改所在分页中的数据备份在另外一个地方,然后才将修改写入到数据库文件中;如果事务失败,则将备份数据拷贝回来,撤销修改;如果事务成功,则删除备份数据,提交修改。 WAL机制的原理是:修改并不直接写入到数据库文件中,而是写入到另...
        
阅读全文
 
        
     
    
        
        
摘要:1.编写HelloWorld.java:class HelloWorld { private native void print(); public static void main(String[] args) { new HelloWorld().print(); } static { System.loadLibrary("HelloWorld"); }} 2.编译HelloWorld.java:javac HelloWorld.java 这将输出HelloWorld.class文件。 3.创建头文件:javah -jni Hel...
        
阅读全文
 
        
     
    
        
        
摘要:JNI的全称是Java Native Interface,它是Java平台的一个标准特性,允许Java代码和C/C++代码进行互操作。 JNI技术使得我们既可以享受Java平台的优势,又能兼顾遗留的C/C++代码,或者享受C/C++代码的性能等优势。 但是,JNI技术会损失Java程序的跨平台特性,因此我们应该尽量避免使用JNI技术。 JNI是一个双向接口,它既可以允许Java代码调用C/C++代码,又能允许C/C++代码调用Java代码;前者的使用场景比较普遍,比如Java中的native方法;后者的使用场景则比较少见,例如在浏览器中执行Java applet程序,此时浏览...
        
阅读全文
 
        
     
    
        
        
摘要:www.sqlite.org针对Linux, Windows, 以及一些其它平台都提供了SQLite的源代码, 编译好的库和工具:1.sqlite3 command-line program(CLP): 这是SQLite提供的一个命令行工具, 它静态链接了SQLite数据库引擎, 可以单独运行.2.SQLite shared library(DLL or so): SQLite编译好的库.3.SQLite Analyzer: SQLite的一个性能与优化工具.4.SQLite的源代码以两种形式分发, 第一种是合并版本(amalgamation), 它将所有模块的代码合并到一个源文件和一个头文件
        
阅读全文
 
        
     
    
        
        
摘要:作为一名Android开发人员,经常需要将手机连接到PC,以便调试程序。 但是,有些手机不容易连接上。导致这一问题有多方面的原因: 1.手机内部状态出了问题。一般来说,重新打开“USB调试”就可以解决这个问题,但是有时需要重启手机或PC才行。 2.USB供电不足。如果是这个原因,那么就需要更换USB连接线或者USB插口。 3.没有安装相应的驱动。这个问题一般只针对Windows用户才存在,安装驱动就可以解决问题。如果是Linux或Mac OS X用户,则无需安装驱动。 4.其它程序干扰。就我个人情况而言,经常就是由于“豌豆夹”的运行,导致Eclipse无法识别到手机。...
        
阅读全文
 
        
     
    
        
        
摘要:在Linux下进行Android开发,连接Android手机,可能会编辑到/etc/udev/rules.d/51-android.rules文件。 那么,为什么这个文件要命名成51-android.rules,而不是其它的名字呢? 详细的解释要求对udev子系统有一定了解。下面简要介绍一下udev。 udev是Linux下的设备管理器,它支持即插即用,即自动识别新加入到系统中的外部设备,特别是USB设备。 用惯Windows的人可能没有这个意识,因为Windows很早就支持即插即用,加入新设备一直都很方便。 udev的一个特点是,它允许指定一系列响应规则,在它侦测到...
        
阅读全文
 
        
     
    
        
        
摘要:在将设备升级至Android 4.2.2之后,可能会出现这样的现象:设备连接之后,一直处于“Offline”状态,无法进行调试。 解决问题的方法是:将SDK Platform Tools升级到r16.0.1或者更新。 升级之后,你会发现,在连接USB之后,设备上会弹出一个对话框,要求授权连接,同意之后,设备就可以正常调试了。 这是Android 4.2.2新加入的一个特性,旨在增加安全性,但是它要求对adb进行升级,所以就会出现上面的问题。
        
阅读全文
 
        
     
    
        
        
摘要:在设备升级到Android 4.2之后,是不是发现“开发者选项”在设置界面中消失了呢? 原来,在4.2中,“开发者选项”默认是隐藏的。 那么,如何打开它?Google给出的官方方法是: 1.进入“设置”界面 2.进入“关于手机”界面 3.连续点击“版本号”7次 4.返回到“设置”界面,“开发者选项”应该显示出来了
        
阅读全文
 
        
     
    
        
        
摘要:FPS FPS代表frames per second,中文意思是每秒显示帧数,它描绘了当前系统的绘制更新频率,它是一个运行时特征。 它的值受到多个因素的影响:画面的变化速度,画面的复杂程度,显卡的性能等。 系统的FPS与画面的变化速度相同是最优的,低于画面的变化速度则会使得画面卡顿,高于画面的变化速度则表明出现了不必要的绘制,浪费系统资源。 显示器 CRT显示器必须不断刷新,频率应在60Hz到100Hz之间,否则屏幕上的荧光会渐渐变暗,导致屏幕闪烁。 LCD显示器无需不断刷新(它的显示原理不要求补给能量就能维持画面的亮度),相反,LCD显示器强调响应时间,一般应在8ms之内完成画面渲染,否则.
        
阅读全文
 
        
     
    
        
        
摘要:在将ADT和SDK Tool升级到最新(分别是21.1和16.0.1)之后,我的一个工程(相对比较大)在编译并运行的时候,出现错误,Eclipse控制台输出如下信息: Unable to execute dex: Cannot merge new index 67208 into a non-jumbo instruction! Conversion to Dalvik format failed: Unable to execute dex: Cannot merge new index 67208 into a non-jumbo instruction! 很多人在升级A...
        
阅读全文
 
        
     
    
        
        
摘要:在我的Ubuntu 12.04机器上,基本上可以识别遇到过的手机,却唯独不能识别华为U8500。 经过调查,问题不是出在PC上,也不是出在驱动上,而是出在手机上。 解决的方法有两种(都要求ROOT权限): 1.在Windows下连接华为U8500(装好驱动之后,一般都可以正常连接),打开Windows命令行,输入adb shell进入手机的shell,然后运行: echo22>/sys/devices/platform/msm_hsusb_periphera/fixusb 或者是(具体看你的手机拥有那个文件,比如我的手机具有下面的文件,所以我运行下面的命令) ...
        
阅读全文
 
        
     
    
        
        
摘要:关于sqlite数据库的多线程访问问题,下面的链接提供了一个详细的说明: http://kagii.com/post/6828016869/android-sqlite-locking
        
阅读全文
 
        
     
    
        
        
摘要:在Java中,使用反射的方法加载类的具体代码是:Class<?> cls = Class.forName("package.ClassName"); 但是,如果需要加载的是一个内部类的话,如果我们使用这种加载方式,会抛出异常:// 如果使用这样的代码,会抛出ClassNotFoundExceptionClass<?> cls = Class.forName("package.ClassName.InnerClass"); 对于内部类,我们需要像下面这样写代码:Class<?> cls = Class.forName(&
        
阅读全文
 
        
     
    
        
        
摘要:在开发Android App的过程当中,可能希望实现插件式软件架构,将一部分代码以另外一个APK的形式单独发布,而在主程序中加载并执行这个APK中的代码。 实现这个任务的一般方法是:// 加载类clsContext pluginContext = mainContext.createPackageContext(PLUGIN_PKG, Context.CONTEXT_IGNORE_SECURITY | Context.CONTEXT_INCLUDE_CODE);ClassLoader loader = pluginContext.getClassLoader();Class<?> 
        
阅读全文