成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Android庫so文件及skia函數的調用

移動開發 Android
為了實現Android的二次開發,希望通過編制動態鏈接庫(.so)的方式實現android native C程序的調用。更為實際的情況則是:編制新庫(new.so)調用android的老庫(如libskia.so libskiagl.so)

以圖形庫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文件如下:

  1. #include <jni.h> 
  2. #include <time.h> 
  3. #include <android\log.h> 
  4. #include <android\bitmap.h> 
  5. #include <pthread.h> 
  6. #include <stdio.h> 
  7. #include <stdlib.h> 
  8. #include <math.h> 
  9. #include "SkBitmap.h"  
  10. #include "SkDevice.h"  
  11. #include "SkPaint.h"  
  12. #include "SkRect.h"  
  13. #include "SkImageEncoder.h"  
  14. extern "C"  
  15. {  
  16. JNIEXPORT jint JNICALL Java_JNItestForGraph_JNItestForGraph_TestBackView_changeback  
  17.   (JNIEnv * env, jobject  obj, jobject bitmap, jint time);  
  18. }  
  19. JNIEXPORT jint JNICALL Java_JNItestForGraph_JNItestForGraph_TestBackView_changeback  
  20.     (JNIEnv * env, jobject  obj, jobject bitmap, jint time)  
  21. {  
  22.                  AndroidBitmapInfo  info;  
  23.              int*              pixels;  
  24.                 int ret;  
  25.                 ret = AndroidBitmap_getInfo(env, bitmap, &info);  
  26.                 ret = AndroidBitmap_lockPixels(env, bitmap, (void**)&pixels);  
  27.                 int width=(int)info.width;  
  28.                 int height=(int)info.height;  
  29.           
  30.                 SkBitmap bmp = SkBitmap();  
  31.                 bmp.setConfig(SkBitmap::kARGB_8888_Config,width,height,0);  
  32.                 bmp.setPixels((void*)pixels);  
  33.                 SkCanvas backgroud(bmp);  
  34.                 SkPaint paint;  
  35.                     paint.setARGB(255, 255, 0, 0);  
  36.                 SkRect r;  
  37.                 r.set(25, 25, 145, 145);  
  38.                 backgroud.drawRect(r, paint);  
  39.                 AndroidBitmap_unlockPixels(env, bitmap);  
  40.                 backgroud.drawRect(r, paint);  
  41.                 paint.setARGB(255, 0, 255, 0);  
  42.                     r.offset(20, 20);  
  43.                     backgroud.drawRect(r, paint);  
  44.                     paint.setARGB(255, 0, 0, 255);  
  45.                     r.offset(20, 20);  
  46.                     backgroud.drawRect(r, paint);  
  47.                 paint.setARGB(255, 0, 0, 0);  
  48.                 backgroud.drawText("ABCD", 4*sizeof(char), 0, 100 , paint);  
  49.                 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技術

責任編輯:zhaolei 來源: 互聯網
相關推薦

2014-06-19 10:59:10

AndroidEclipse公共庫

2017-03-31 09:35:14

Android函數Android庫

2015-11-04 11:17:10

移動開發圖片格式

2016-11-29 10:49:29

Android

2009-08-13 18:36:36

C#繼承構造函數

2022-12-09 15:34:38

2010-04-27 09:55:15

2021-03-03 08:02:13

JavaScript函數字節

2011-06-22 14:07:42

Lua

2011-05-05 14:24:02

Android NDKAndroid NDKNDK

2017-01-03 15:23:56

Android動態加載SO庫

2022-05-05 09:02:24

Go函數調用棧

2011-09-09 16:19:40

Android Web

2014-07-01 11:31:35

NDKSO庫JNI調用

2011-08-10 17:00:45

DB2數據庫存儲過程

2022-06-07 15:33:51

Android優化實踐

2011-08-22 14:00:13

SQL Server 游標調用函數

2023-10-26 11:37:35

函數Python

2018-05-09 10:48:58

Android加密密碼學

2010-09-10 16:02:13

SQLCHARINDEX函數
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 91在线看 | 亚洲日韩欧美一区二区在线 | 日韩精品在线播放 | 在线成人一区 | 国产精品久久av | 国产黄色在线观看 | 亚洲视频一区在线播放 | 美女久久视频 | av免费在线观看网站 | 久久久免费 | 国内自拍第一页 | 亚洲一本 | 欧美一级欧美三级在线观看 | 国产精品久久久久久久久久久久 | 午夜精品视频在线观看 | 亚洲黄色av | 欧美黑人国产人伦爽爽爽 | 久久99精品国产 | 蜜桃臀av一区二区三区 | 欧美日韩在线精品 | 国产一级一级国产 | 欧美激情视频一区二区三区在线播放 | 亚洲一二三区av | 嫩草懂你的影院入口 | 特级生活片 | 羞羞色在线观看 | 久久久国产一区二区三区四区小说 | 欧美a√| 黑人精品欧美一区二区蜜桃 | 9porny九色视频自拍 | 成人精品久久 | 日本在线视 | 国产精品高清在线 | 国产欧美精品 | 欧美不卡在线 | 亚洲欧美一区二区三区国产精品 | 日韩中文字幕在线视频 | 欧美福利精品 | 日本不卡一区 | 毛片免费在线观看 | 久草免费在线视频 |