以图形库skia为例,具体过程如下:
成都创新互联公司是专业的大同网站建设公司,大同接单;提供网站制作、成都做网站,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行大同网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!
1、建立完整的Android开发环境,JAVA层的环境SDK、JDK、eclipse都要装,C&C++层的环境NDK、cygwin、git也都要装好。
2、下载完整的skia代码,代码自己到google上搜吧(重要提示:wiki,TortoiseSVN)
3、通过git下载android源码:xxxx/core,xxxx/base,xxxx/skia三个文件夹就够了。(找到android源码git文件的下载列表,搜索页面就可以了,都下载,都下载!!)
4、编译skia文件夹,获得skia对应的so文件。
4.1 如果你的skia文件夹来自skia官网,那就看看目录下的config文件,编写你的make.out文件,之后编译,出错,再编译,再出错。。。是因为缺少头文件,对吧?,这些头文件与硬件或图像编码有关,比如说atomic.h啊png.h啊什么的。找吧!!补上!!还是报错的话,就是因为还缺少某些定义,报错一大推“undeclared”,找不到就只能自己写,当然前提是你对你的开发板足够熟悉,比如skia要求mutex的申明,并实现这个自旋锁的占用和释放接口。(本步骤可以省略)
4.2 在ndk文件夹里搜索,获得libskia.so, libskiagl.so, libjnigraphics.so
5、新建项目文件夹,把第三步的core,base,skia三个文件夹扔进去。在项目文件夹里新建个lib文件夹,把第四步生成的so文件扔到lib里。新建jni文件夹,在jni里编写你的cpp文件。(重要提示:你可以不仔细看我写的东西,但如果你是在没有仔细看NDK自带doc文件夹里那十几篇英文参考的情况下这么做,那你一定会生不如死的)
6、搜索skia文件,找到skcanvas.h,看看我们能用skia干什么。和android相比,skia的自述文件俨然像是个天使。不理解什么是天使?请参看android NDK下的文档。
7、以画画写字为例,我的cpp文件如下:
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- #include "SkBitmap.h"
- #include "SkDevice.h"
- #include "SkPaint.h"
- #include "SkRect.h"
- #include "SkImageEncoder.h"
- extern "C"
- {
- JNIEXPORT jint JNICALL Java_JNItestForGraph_JNItestForGraph_TestBackView_changeback
- (JNIEnv * env, jobject obj, jobject bitmap, jint time);
- }
- JNIEXPORT jint JNICALL Java_JNItestForGraph_JNItestForGraph_TestBackView_changeback
- (JNIEnv * env, jobject obj, jobject bitmap, jint time)
- {
- AndroidBitmapInfo info;
- int* pixels;
- int ret;
- ret = AndroidBitmap_getInfo(env, bitmap, &info);
- ret = AndroidBitmap_lockPixels(env, bitmap, (void**)&pixels);
- int width=(int)info.width;
- int height=(int)info.height;
- SkBitmap bmp = SkBitmap();
- bmp.setConfig(SkBitmap::kARGB_8888_Config,width,height,0);
- bmp.setPixels((void*)pixels);
- SkCanvas backgroud(bmp);
- SkPaint paint;
- paint.setARGB(255, 255, 0, 0);
- SkRect r;
- r.set(25, 25, 145, 145);
- backgroud.drawRect(r, paint);
- AndroidBitmap_unlockPixels(env, bitmap);
- backgroud.drawRect(r, paint);
- paint.setARGB(255, 0, 255, 0);
- r.offset(20, 20);
- backgroud.drawRect(r, paint);
- paint.setARGB(255, 0, 0, 255);
- r.offset(20, 20);
- backgroud.drawRect(r, paint);
- paint.setARGB(255, 0, 0, 0);
- backgroud.drawText("ABCD", 4*sizeof(char), 0, 100 , paint);
- return (ret);
- }
(重要提示:文件名的命名很有讲究,网上搜搜NDK native C或好好看看NDK自述文档HOWTO.TXT)
8、编写android.mk和appliction文件,具体怎么写,直接拷贝NDK下sample里的同名文件,再修改一下就可以了。具体怎么改。。。兄弟!不是我蒙你,还是看看NDK下的自述文档吧,我收回在第5步所说的话。用NDK文件夹下的ndk-build编译,根据出错信息关联所需头文件,都在你之前下载的几个文件夹里了,真的。编译成功,会在lib文件夹得到新的so文件。(重要提示:mk文件中记得带上-lskia,-lskiagl,-ljnigraphics)
9、编写JAVA程序调用上面的函数。该怎么写呢? 打开eclipse,新建工程,在程序中先Loadlibrary,再native C申明,具体。。。网上搜吧,要么就看看NDK下面sample里随便哪个例子,那个plasma就不错
10、运行ecplise里的项目,之前先看看有没有把so文件放到项目所在地的lib中。
11、下载到真机上运行,较低版本的机器,会缺少libjnipraphics.so库,需要在apk中添加。
【编辑推荐】
Android布局属性详解
Android 多任务多线程断点下载
Android Activity和Intent机制学习笔记
Android应用——Activity传参数与跳转
升级到Android 2.3.4,体验***的Android技术
分享标题:Android库so文件及skia函数的调用
文章网址:http://www.mswzjz.cn/qtweb/news46/20946.html
攀枝花网站建设、攀枝花网站运维推广公司-贝锐智能,是专注品牌与效果的网络营销公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 贝锐智能