版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
【移動(dòng)應(yīng)用開發(fā)技術(shù)】(androidswig實(shí)現(xiàn))用cc++混合編程方式為iosandroid實(shí)現(xiàn)一個(gè)自繪日期選擇控件(三)
三、Android版本:1、ndk開發(fā)必要的基礎(chǔ)知識(shí):原本想配套寫一下ndk開發(fā)方面的基礎(chǔ)和步驟,但老實(shí)說,這也并非三言兩語就能描述清楚的,好在網(wǎng)上已經(jīng)有現(xiàn)存的文章了,經(jīng)過該作者同意,本人就引用一下:@zzyyppqqthanks2014年的時(shí)候,基本都是使用eclipse來開發(fā),使用androidmk來編譯ndk程序。但是目前都是使用AndroidStudio做為開發(fā)和編譯ndk的工具,因此我們關(guān)注AndroidStudio上的實(shí)現(xiàn)和編譯。zzyyppqq-超級(jí)簡(jiǎn)單的AndroidStudiojni實(shí)現(xiàn)(無需命令行)通過使用ndk提供的工具來編譯ndk程序。根據(jù)上述文檔,總結(jié)一下開發(fā)ndk的流程以及編譯過程:1)
public
native
String
getString();在類中用native關(guān)鍵字聲明一個(gè)成員方法
2)
調(diào)用javah程序,自動(dòng)生成navtie方法對(duì)應(yīng)的.h文件,得到可怕的c/c++函數(shù)原型:
JNIEXPORT
jstring
JNICALL
Java_com_zhangyp_higo_myndk_MyNdk_getString
(JNIEnv
*,
jobject);
3)
在.c或.cpp文件中實(shí)現(xiàn)上面javah自動(dòng)生成的函數(shù)
4)
編寫mk文件,用于編譯生成.so(類linux系統(tǒng)的動(dòng)態(tài)鏈接庫)文件
包括Application.mk和android.mk這兩個(gè)mk文件
5)
你可以先調(diào)用一下ndk-build
clear命令清理一下工程緩存之類的(有時(shí)不清理會(huì)出現(xiàn)一些問題),然后再調(diào)用ndk-build命令用于生成.so文件
6)
在android
類中使用static
{
System.loadLibrary("MyLibrary");
}方式,將剛才生成的.so加載進(jìn)來,然后就按照正常的android開發(fā)流程進(jìn)行native函數(shù)調(diào)用了。由此可見,Ndk的開發(fā)也不是很難,只要記住上面幾個(gè)步驟,就可以進(jìn)行簡(jiǎn)單的ndk開發(fā)。技術(shù)在發(fā)展,時(shí)代在進(jìn)步。隨著AndroidStudio的普及,引入了新的構(gòu)建系統(tǒng):gradle系統(tǒng)后,我們可以不用寫.mk文件了
要知道,一個(gè)稍微復(fù)雜一點(diǎn)的ndk項(xiàng)目,要在.mk中撰寫很多命令,單單.mk命令參考就有n多頁,太可怕了!!zzyyppqq-AndroidStudio使用gradle-experimental構(gòu)建NDK工程(無需Android.mk、Application.mk文件)1)
gradle使用ndk編譯,必須要使用:gradle-experimental
插件,這個(gè)需要到android相關(guān)網(wǎng)站去下載的
2)
一定要注意gradle-experimental的版本號(hào)與gradle的對(duì)應(yīng)關(guān)系,不能搞混了。曾經(jīng)我因?yàn)闆]注意這一點(diǎn),導(dǎo)致掉在坑里兩天沒出來。太痛苦了(見下圖說明)。
3)
一定要按照上文提到的步驟,一步步設(shè)置,zzyyppqq的gradle設(shè)置流程很清楚,就當(dāng)武功口訣來使用,否則掉在坑里你也不知道怎么回事。
4)
代碼的開發(fā)流程和.mk
demo差不多,只是不需要編寫.mk文件以及調(diào)用ndk-build命令了,這是使用gradle-experimental獲得的最大好處。再次強(qiáng)調(diào)一下:gradle構(gòu)建文檔參考,請(qǐng)戳這里1)需要在java類中用native聲明方法
2)需要用Javah生成.h頭文件
3)需要在實(shí)現(xiàn).h中的函數(shù)時(shí)候,很熟悉java中的數(shù)據(jù)類型和c/c++中的數(shù)據(jù)類型之間的對(duì)應(yīng)關(guān)系
例如JNIEnv,jobject,jstring等,還有其他很多數(shù)據(jù)類型,可以自己參看ndk開發(fā)文檔。
4)需要有時(shí)調(diào)用如此長(zhǎng)名字的函數(shù):Java_com_zhangyp_higo_myndk_MyNdk_getString有了SWIG后,我們就可以正常方式編寫C/C++代碼,然后自動(dòng)包裝成ndkjni調(diào)用,不需要了解androidndk數(shù)據(jù)類型,不需要javah調(diào)用,也不需要native聲明,Let’sgo!go!go!go!2、SWIG篇章:SWIG全稱是SimplifiedWrapperandInterfaceGenerator,官方網(wǎng)站是/。SWIG是一個(gè)開發(fā)工具,能夠?qū)⑹褂肅或者C++編寫的軟件與其他各種高級(jí)編程語言進(jìn)行嵌入聯(lián)接。1)很簡(jiǎn)單,官網(wǎng)下載,解壓到**最好沒有中文字符的**文件夾下
2)由于要使用swig.exe命令行程序,最好設(shè)置一下環(huán)境變量
3)
在命令行中輸入swig
-help,出現(xiàn)各種命令參數(shù),說明環(huán)境變量設(shè)置成功。1)
嚴(yán)格按照zzyyppqq的文檔配置好gradle以及gradle-experimental的參數(shù)
2)
在AndroidStudio中按zzyyppqq文檔創(chuàng)建jni文件夾
3)
將用c/c++混合編程方式為ios/android實(shí)現(xiàn)一個(gè)自繪日期選擇控件(一)中的
calendarCore.h和calendarCore.cpp文件復(fù)制到j(luò)ni文件夾下面,如下圖:4)
編寫swig.i文件(接口文件),用于描述如何輸出.h文件為java接口,.i表示interface5)
編寫generate.bat文件用于調(diào)用swig.exe自動(dòng)生成接口文件(很多個(gè),具體我們圖示)雙擊運(yùn)行bat前后效果如下:
6)
swig轉(zhuǎn)換的流程分析:7)
c/c++中的struct和class會(huì)自動(dòng)生成java對(duì)應(yīng)的類,并自動(dòng)添加(如果需要的話)get/set函數(shù):請(qǐng)查看CGPoint.java
SCalendar.java等源碼
8)
c/c++中的輸出參數(shù),例如void
calendar_get_year_month(SCalendar*
calendar,int*
year,int*
month);
int*
year
和
int*
month是傳地址方式,將結(jié)果傳出來,對(duì)于java來說,必須要裝箱(boxing)以及拆箱(unboxing)
將int傳值方式變?yōu)閭饕梅绞?,因此自?dòng)生成了SWIG_TYPE_p_int.java類,用于將值類型變?yōu)橐妙愋?、Android和ISO版Calendar的源碼:Android源碼不再分析,實(shí)現(xiàn)細(xì)節(jié)可以參考calendarIO實(shí)現(xiàn)Android和IOS版所有的源碼請(qǐng)狠狠地戳這里/jackyblf/4、再次強(qiáng)調(diào)一下為什么用c/c++?;谔摂M機(jī)的源碼實(shí)在太容易反編譯了,c#/java/as3等代碼,借助于一些工具,不到一分鐘就可以將源碼和資源全部反編譯出來。大家可以下載一下微信android或faceuandroid版,反編
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 《轉(zhuǎn)轂試驗(yàn)臺(tái)培訓(xùn)》課件
- 第五單元學(xué)情評(píng)估(含答案)2024-2025學(xué)年統(tǒng)編版七年級(jí)語文下冊(cè)
- 自身敏感性皮炎的臨床護(hù)理
- 交通事故責(zé)任劃分講解課件-交規(guī)解讀
- 妊高癥的健康宣教
- 心理發(fā)育障礙的臨床護(hù)理
- 2021年功能飲料東鵬飲料分析報(bào)告
- 短暫性棘層松解性皮病的臨床護(hù)理
- 《Flash CC整站動(dòng)畫項(xiàng)目實(shí)戰(zhàn)》課件-第5篇 四季沐歌
- 孕期食欲亢進(jìn)的健康宣教
- 一年級(jí)語文上冊(cè)專項(xiàng)復(fù)習(xí)(口語交際、看圖寫話)課件
- 最新Unit-8-How-do-you-make-a-banana-milk-shake-全單元教案
- 機(jī)械制造有限公司組織架構(gòu)圖模板
- T-SDDA 0002-2021 住宅裝飾裝修工程質(zhì)量驗(yàn)收標(biāo)準(zhǔn)
- 加油站觸電現(xiàn)場(chǎng)處置方案
- 承德建龍265m2燒結(jié)機(jī)工藝梳理
- 《現(xiàn)代漢語詞匯》PPT課件(完整版)
- 紅色校園文化建設(shè)研究報(bào)告(正式)
- 小學(xué)語文教師晉高級(jí)職稱答辯題
- 門診、住院業(yè)務(wù)流程和數(shù)據(jù)流
- 未打卡情況說明表
評(píng)論
0/150
提交評(píng)論