请选择 进入手机版 | 继续访问电脑版

Lazarus中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

Lazarus IDE and 组件 下载地址版权申明
查看: 2449|回复: 5

用FPC製作Android JNI原生so檔範例碼

[复制链接]

该用户从未签到

发表于 2013-12-29 22:13:56 | 显示全部楼层 |阅读模式
本範例檔旨在說明如何透過Android JNI(Java Native Interface),讓Java層與FreePascal所製成的原生碼so檔相互正確地傳遞資料;僅以狀況較為複雜的字串為例,其他基本的資料型態如int(jint)、double(jdouble)…等等較為簡單,在本範例就不贅述。

(原生碼編譯環境使用Laz4Android,Lazarus中文社區上找得到,再次感謝delphicn大大慷慨分享)
--
JNI_Demo內容:

1. 實做一函式「JStringToString」,將Java String轉成Pascal String。

2. 函式「PassString」接收Java String後,透過函式「JStringToString」轉換成Pascal String,再示範將Pascal String轉回Java String回傳至Java層。

3. 函式「SetAndroidPackageName」是藉由Java層所傳入Android app主程式的PackageName來設定調用「libjni_demo2.so」的路徑。

4. 函式「PassString2」是藉由調用純原生so檔「libjni_demo2.so」做字串資料傳遞再回傳給Java層的範例。
--
JNI_Demo2內容:

1. 函式「PassString2」,僅單純的接收pAnsiChar、建立新副本後回傳。

2. 函式「FreeStr」是用於釋放JNI_Demo2內PassString2所創建新副本的空間用。(重要!雖然無此步驟程式似乎也能運行,但會造成記憶體洩漏!)
--
Java端的調用方式範例(For Eclipse)有寫在資料夾「Java」內,請自行參閱。
--
To Lazarus中文社區板上的各位前輩們:

此範例檔案雖然技術含量不高,但也是費了不少時間去找資料、試誤,發此文只是希望能對板上有需要的人能幫上忙,減少一些走冤枉路的時間;就當作是先前在板上學習了不少東西的一個小小回饋吧!

哥,行行好,看在小弟打了不少字,花了不少時間的份上,請勿任意轉發此篇文章;檔案有人要更新、修改、翻譯的話,我也不反對(實際上也管不了 ><""),但請盡量保持完整,起碼,留個小弟的名子吧…

編程界某半路出家的後進
陳昱志(Chen, Yu-Chih / David Chen)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

评分

参与人数 1贡献值 +1 收起 理由
bugxiong + 1

查看全部评分

回复

使用道具 举报

该用户从未签到

发表于 2013-12-30 00:24:37 | 显示全部楼层
用的是繁体字啊,楼主来自何方?
回复 支持 反对

使用道具 举报

该用户从未签到

 楼主 发表于 2013-12-30 08:09:21 | 显示全部楼层
小弟來自台灣,雖然用的是繁體字,但是檔案我用UTF-8編碼儲存,應該開啟後不至於變成亂碼 (若有相關問題還請各位反應)

小弟不算是資訊工程本科,工作也不在編程產業,所以嚴格來說不算是真正專業的編程界人士;只是工作上有用到程式語言,又發現 Lazarus/FreePascal/Lazarus中文社區 這等好貨,寫Pascal寫出興趣來罷了。

大多時間都在板上潛水看文章學習,偶有心得才上來野人獻曝一下,希望這個語言、這個社區能越變越好
回复 支持 反对

使用道具 举报

  • TA的每日心情
    奋斗
    2017-8-16 21:28
  • 签到天数: 6 天

    [LV.2]偶尔看看I

    发表于 2013-12-30 15:07:19 | 显示全部楼层
    谢谢支持Lazarus中文社区!经常在lazarus官网见到这位朋友。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2014-4-15 09:10:22 | 显示全部楼层
    不錯,我在樓主的代碼基礎上研究下怎麼進行數組(array)的傳遞。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2014-7-20 18:07:33 | 显示全部楼层
    正好需要~
    多谢楼主的技术分享~
    掌声鼓励~
    回复 支持 反对

    使用道具 举报

    QQ|手机版|小黑屋|Lazarus中国|Lazarus中文社区 ( 鄂ICP备16006501号-1

    GMT+8, 2021-6-23 10:12 , Processed in 0.064855 second(s), 28 queries .

    Powered by Discuz! F1.0 Build 20160930

    © 2001-2021 Comsenz Inc. & Discuz! Fans

    快速回复 返回顶部 返回列表