Android用NDK和整套源码下编译JNI的不同
前些天要写个jni程序,因为才几行代码,想着用ndk开发可能容易些,就先研究了下。不过最终我的代码虽然只有几行,但需要libdl,因为用到了dlopen一类的函数,只能又换到用android源码体系下编译。
不过两个都用了下,就发现了些不同。我其实并不能确定这些是不是实际存在的差异的,我只是拿ndk的sample和我见到的android源码里的jni代码做的比较
1. ndk支持的库很少,所以用以前最好先看看自己需要的功能是不是已经包括了,省得白忙活。不过人家是有解释的,说ndk里有的库才是稳定的,其它的建议你不要用。嗯,google总是这一套说辞,不公开的api也是。至于要看android源码中多了哪些库,make modules后grep一下lib开头的应该就是了,不过也不是所有都能用啦。
2. 注册函数的方法是不同的。举例说,我在com/evan129/jnitest/jniutils.java有个native int foo()方法,需要在jni中实现
在ndk中,你只要实现这个函数,然后函数名是以jint java_com_evan129_jnitest_jniutils_foo(jnienv* env, jobject thiz) 命名既可。也就是说,如果你的jni只要实现这个函数,并且功能也很简单的话,那么你的jni c/cpp文件里只需要这一个函数就完事了。
但在android源码中编译jni代码是不同的,jni中的函数名无所谓。不过你至少还需要加一个
jniexport jint jnicall jni_onload(javavm* vm, void* reserved)方法,这个方法你可以找个现有的复制一把就行,检查运行环境的。然后主要是这个方法中会调用(*env).registernatives函数,在这里把jni中的方法和java文件中的方法关联起来。
看起来像是ndk自动补上了这部分工作,我并不清楚原理啦。
3. 有个很诡异的区别,自动传入的jnienv* env好像不是一个东西。因为在android源码中使用这个env一般是如env->newstringutf(…),而ndk中sample里的一处是(*env)->newstringutf(…) 这env和*env差很大吧。但两处函数传入的都是jnienv* env,我只能怀疑jnienv的定义是不是都是不同的。
末了,就是说下我这个很简单的jni折腾了我两天的一个问题。如前所说,我是用android源码来编译的,自己在packages/app/下建了pinyinjni工程,下面有个jni目录,每次直接用mmm packages/app/pinyinjni/jni来编译。jni目录下的android.mk中指定的名字是这样的local_module := libpinyin 每次编译都很顺利,生成了libpinyin.so。但是我在java文件里,system.loadlibrary(“libpinyin”)总是失败。感谢paranoia@newsmth帮我解决了这个问题,告诉我在loadlibrary时用”pinyin”。但是,这个事情实在太奇怪了,那文件名是libpinyin.so啊,而且我在这里用/data/data/…/libpinyin.so这种完整路径也会失败,我以前虽然没写过jni,但调用过,用完整路径指定jni so文件应该不会有问题的。或者,从另一个角度想,如果我local_module的名字不是用lib开头的,那它调用时应该用什么名字?这个”lib”前缀又是哪步删除的?我没有多做测试了,但是猜想ndk中应该是没有这种诡异的问题的。
Android代码里都出现OCR库了
orz..最近几天更新好多啊
昨天更新了一把,donut分支上的全局搜索已经可用了,虽然和预想中一样的弱,联系人只能搜人名,还是不能搜短信,目前试了下能搜的也只有应用程序名和网页历史记录
临睡前更新了一把,发现donut分支没什么变化,master分支出现了一个巨大的包,本地展开后356m。。我还以为更新kernel呢
在external/tesseract,这个包在donut分支上没有看到。看了下说明,是个ocr的库
this package contains the tesseract open source ocr engine.
this code is a raw ocr engine. it has no page layout analysis, no output
formatting, and no ui. it can only process an image of a single column
and create text from it. it can detect fixed pitch vs proportional text.
having said that, in 1995, this engine was in the top 3 in terms of character
accuracy, and it compiles and runs on both linux and windows.
as of 2.0, tesseract is fully unicode (utf-8) enabled, and can recognize 6
languages “out of the box.” code and documentation is provided for the brave
to train in other languages. see code.google.com/p/tesseract-ocr for more
information on training.
不知道google想在android上做什么软件,是说以后拿着gphone可以去图书馆拍书了么?xd
Android donut分支更新了
rss源跟了engadget英文站,看到的消息。原文链接 内有一张截图。不过那也是转载xda-forum上的帖子啦,第60楼帖子有更多截图
据已经试用的人说,有以下一结明显的可以看到感觉到的更新:
multitouch 多点触摸支持
gestures 手势支持(这个原来就有,估计是改进吧)
cdma 就是以前只支持gsm+wcdma而已,以后可以有cdma的机器了,虽然我也没兴趣吧
search integrated into everything 就是那个全局搜索
wpa enterprise 不知道这个wpa说的是不是wifi加密的那个。。
vpn support vpn支持
automated backups 自动备份
tons of performance tweaking 大量性能调整。话说他们用模拟器的,也能感觉出来么?
read more
上些HTC A6161 (Magic)和Dopod A6188的图
对比的文章再说吧,写评测不是我的专长。不过,摄像也不是我的专长,拍得不好,请见谅。听我们同事说,这只dopod a6188是国内正式出售的第一只机器哦。
首先是包装的不同,htc magic的包装更像iphone一些,比较小巧,dopod的还是华丽点儿啊

read more
Hero rom初体验
在入g2之前,就看到有hero for g1的rom了。看过下截图,不是喜欢的配色,所以一直也没有想尝试。今天总算有机会试了一把。网上能找到的,像xda上的,好像都是for vodfone magic的,我还是折腾了会儿,才成功刷到我的a6161上,呵呵。比对了下,似乎vodfone版和这个a6161,主要就两处不同,用的boot.img不同,wifi驱动不同。一直不知道怎么把已有boot.img解开再修改,我只好用g2 rom中的boot.img去替换hero rom里的。试了几次,好歹还是成功的。
read more
试用四个Android twitter client有感
今天又出了门,去逛了商场,一定要记下来,以作为证据备查。于是想到要推到twitter上去
之前只用过一款,当时在android market上搜的,叫twitta,评价还不错。试了下,看着像网页版的,反正ui风格很诡异,和android本身很不相符,但至少满足基本需求。
今天开始这个程序一登录后,就有异常,直接崩溃。我只好想着另找个试试
首先,我试了直接网页打开twitter,被自动定向到wap版,但是android浏览器不支持wap/wml页面,显示了源码。
还试了以下三款,
twitli,这东西至少默认设置下是不支持中文的,菜单项一大堆,反正粗看了一分钟,我还没找到地方设置。这还算了。我竟然都没找到发推文的地方-_- 另外,也没有登出,注销的地方,不知道这东西是不是会自己一直跑后台
droid twitter 登录界面还不错,还带个广告条,让我认为应该是某个不错的收费软件的带广告免费版吧。登录一看,只有一个输入框发自己的新推,看不到历史,更别说follow的别人的消息了。还强制横屏。。
还有个就叫twitter的,最终这个还算work,只是,它是个网页版的东西。程序里放了个webview
所以,如果您要用的话,我建议试试看twitta,要是你的帐号不死机,那这个还算可以。
结论是,android market上的免费软件都是些什么玩意儿啊。。 还没试过收费区的。还不如都出些做得好的收费软件,我再去找破解呢。不打算在这上面浪费时间了
补充:评论区推荐的twidroid软件也不错,推荐一下
Howto change the startup animation of Android OS
the statup animation means the one you see before the launcher application comes out.
it was a line with a red point goes from left to right again and again before, in android 1.0. currently, on cupcake, it’s a text string, “android”, with shine goes from left to right.
i found someone add an advertisement logo to that animation in a customized rom. so i studied how to remove that, or make a new one by myself.
finally, i found it out. there are 2 pictures under frameworks/base/core/res/assets/images:
android-logo-mask.png
android-logo-shine.png
the 1st one is the background. then, you can edit it with picture editor, like add your own name on it.
well, after edited it, you need to build framework-res out, with command “make framework-res”. then, you will get a new framework-res.apk. but usually, you can not use this file to replace the one in the rom/firmware for real devices, like g1, g2. since, some resources are not under the same version.
what i do is pull out the original framework-res.apk from the rom. unzip both this framework-res.apk and the one i made by myself. replace the 2 pictures under assests/images with the one i made before. notice, you can not replace the files with the png files you edited, but not compiled.
then zip out framework-res.apk again, and sign with signapk tool. now you can use the new framework-res.apk to replace the original one.
Magic ROM for G1, 0331更新
基于 haykuro的4.9版rom 做的
再次感谢 吹友吧 提供下载空间
下载地址
改名为update.zip 放在sdcard根目录,进入recovery模式刷机。似乎第一次重启后还后再进入一次recovery模式,用home+back重启下应该就能进入,不能的话,就先alt+w清除一次旧数据
基于原版的修改:
1. 替换字体,支持中文显示
2. 去除自带的英文输入法,节省空间装字体了
3. 更改默认apn设置,进入时不用设置,已经测试能够直接联网激活,和收发彩信!!
相较上版区别
1. 增加了google apps,只有google maps因为还有bug,没有增加
2. 替换了contacts和dialer,没有htc版本好看了,但是该版支持和google同步联系人
3. 删除了quickoffice和pdfviewer,似乎是版权问题吧,这个有需要,将来我们可以自己加-_-
一些已知问题
1. wifi, 蓝牙,耳机还是不能用。蓝牙和耳机也不是太常用,没有wifi…你就当它是大陆行货吧
2. 我好像没找到哪禁止同步-_-,又没有wifi,这样很费流量唉
3. 对于屏幕开合后不能自动转向的问题,请把设置中声音和显示,orientation的勾去掉
G2 Magic ROM在G1上可用哦
更新: 放出下载,感谢 吹友吧 提供下载空间
下载链接
下载后把文件名改为update.zip,和一般的刷机一样刷就行
这两天好消息不断唉,不过我也是看到androidin.net的帖子才注意到的啦,那这里也帮他们打下广告
这些有许多图
http://www.androidin.net/read.php?tid=4799
原帖首发是在这里
http://forum.xda-developers.com/showthread.php?t=498026
read more