您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關Android中怎么調用skia函數,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。
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 <jni.h> #include <time.h> #include <android\log.h> #include <android\bitmap.h> #include <pthread.h> #include <stdio.h> #include <stdlib.h> #include <math.h> #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中怎么調用skia函數就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。