版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
【移動應(yīng)用開發(fā)技術(shù)】(androidswig實現(xiàn))用cc++混合編程方式為iosandroid實現(xiàn)一個自繪日期選擇控件(三)
三、Android版本:1、ndk開發(fā)必要的基礎(chǔ)知識:原本想配套寫一下ndk開發(fā)方面的基礎(chǔ)和步驟,但老實說,這也并非三言兩語就能描述清楚的,好在網(wǎng)上已經(jīng)有現(xiàn)存的文章了,經(jīng)過該作者同意,本人就引用一下:@zzyyppqqthanks2014年的時候,基本都是使用eclipse來開發(fā),使用androidmk來編譯ndk程序。但是目前都是使用AndroidStudio做為開發(fā)和編譯ndk的工具,因此我們關(guān)注AndroidStudio上的實現(xiàn)和編譯。zzyyppqq-超級簡單的AndroidStudiojni實現(xiàn)(無需命令行)通過使用ndk提供的工具來編譯ndk程序。根據(jù)上述文檔,總結(jié)一下開發(fā)ndk的流程以及編譯過程:1)
public
native
String
getString();在類中用native關(guān)鍵字聲明一個成員方法
2)
調(diào)用javah程序,自動生成navtie方法對應(yīng)的.h文件,得到可怕的c/c++函數(shù)原型:
JNIEXPORT
jstring
JNICALL
Java_com_zhangyp_higo_myndk_MyNdk_getString
(JNIEnv
*,
jobject);
3)
在.c或.cpp文件中實現(xiàn)上面javah自動生成的函數(shù)
4)
編寫mk文件,用于編譯生成.so(類linux系統(tǒng)的動態(tài)鏈接庫)文件
包括Application.mk和android.mk這兩個mk文件
5)
你可以先調(diào)用一下ndk-build
clear命令清理一下工程緩存之類的(有時不清理會出現(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ā)也不是很難,只要記住上面幾個步驟,就可以進(jìn)行簡單的ndk開發(fā)。技術(shù)在發(fā)展,時代在進(jìn)步。隨著AndroidStudio的普及,引入了新的構(gòu)建系統(tǒng):gradle系統(tǒng)后,我們可以不用寫.mk文件了
要知道,一個稍微復(fù)雜一點的ndk項目,要在.mk中撰寫很多命令,單單.mk命令參考就有n多頁,太可怕了!!zzyyppqq-AndroidStudio使用gradle-experimental構(gòu)建NDK工程(無需Android.mk、Application.mk文件)1)
gradle使用ndk編譯,必須要使用:gradle-experimental
插件,這個需要到android相關(guān)網(wǎng)站去下載的
2)
一定要注意gradle-experimental的版本號與gradle的對應(yīng)關(guān)系,不能搞混了。曾經(jīng)我因為沒注意這一點,導(dǎo)致掉在坑里兩天沒出來。太痛苦了(見下圖說明)。
3)
一定要按照上文提到的步驟,一步步設(shè)置,zzyyppqq的gradle設(shè)置流程很清楚,就當(dāng)武功口訣來使用,否則掉在坑里你也不知道怎么回事。
4)
代碼的開發(fā)流程和.mk
demo差不多,只是不需要編寫.mk文件以及調(diào)用ndk-build命令了,這是使用gradle-experimental獲得的最大好處。再次強調(diào)一下:gradle構(gòu)建文檔參考,請戳這里1)需要在java類中用native聲明方法
2)需要用Javah生成.h頭文件
3)需要在實現(xiàn).h中的函數(shù)時候,很熟悉java中的數(shù)據(jù)類型和c/c++中的數(shù)據(jù)類型之間的對應(yīng)關(guān)系
例如JNIEnv,jobject,jstring等,還有其他很多數(shù)據(jù)類型,可以自己參看ndk開發(fā)文檔。
4)需要有時調(diào)用如此長名字的函數(shù):Java_com_zhangyp_higo_myndk_MyNdk_getString有了SWIG后,我們就可以正常方式編寫C/C++代碼,然后自動包裝成ndkjni調(diào)用,不需要了解androidndk數(shù)據(jù)類型,不需要javah調(diào)用,也不需要native聲明,Let’sgo!go!go!go!2、SWIG篇章:SWIG全稱是SimplifiedWrapperandInterfaceGenerator,官方網(wǎng)站是/。SWIG是一個開發(fā)工具,能夠?qū)⑹褂肅或者C++編寫的軟件與其他各種高級編程語言進(jìn)行嵌入聯(lián)接。1)很簡單,官網(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實現(xiàn)一個自繪日期選擇控件(一)中的
calendarCore.h和calendarCore.cpp文件復(fù)制到j(luò)ni文件夾下面,如下圖:4)
編寫swig.i文件(接口文件),用于描述如何輸出.h文件為java接口,.i表示interface5)
編寫generate.bat文件用于調(diào)用swig.exe自動生成接口文件(很多個,具體我們圖示)雙擊運行bat前后效果如下:
6)
swig轉(zhuǎn)換的流程分析:7)
c/c++中的struct和class會自動生成java對應(yīng)的類,并自動添加(如果需要的話)get/set函數(shù):請查看CGPoint.java
SCalendar.java等源碼
8)
c/c++中的輸出參數(shù),例如void
calendar_get_year_month(SCalendar*
calendar,int*
year,int*
month);
int*
year
和
int*
month是傳地址方式,將結(jié)果傳出來,對于java來說,必須要裝箱(boxing)以及拆箱(unboxing)
將int傳值方式變?yōu)閭饕梅绞剑虼俗詣由闪薙WIG_TYPE_p_int.java類,用于將值類型變?yōu)橐妙愋?、Android和ISO版Calendar的源碼:Android源碼不再分析,實現(xiàn)細(xì)節(jié)可以參考calendarIO實現(xiàn)Android和IOS版所有的源碼請狠狠地戳這里/jackyblf/4、再次強調(diào)一下為什么用c/c++?;谔摂M機的源碼實在太容易反編譯了,c#/java/as3等代碼,借助于一些工具,不到一分鐘就可以將源碼和資源全部反編譯出來。大家可以下載一下微信android或faceuandroid版,反編
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年校園安全應(yīng)急處置與保安人員聘用協(xié)議3篇
- 二零二五年度高速鐵路工程質(zhì)量擔(dān)保合同2篇
- 2025年上半年郴州市人民檢察院招考聘用制抄錄員易考易錯模擬試題(共500題)試卷后附參考答案
- 2025年上半年邯鄲市直事業(yè)單位招考考試(292人)易考易錯模擬試題(共500題)試卷后附參考答案
- 2025年上半年遼寧鐵嶺縣事業(yè)單位面向“三支一扶”人員招聘10人重點基礎(chǔ)提升(共500題)附帶答案詳解-1
- 2025年上半年遼寧沈陽市皇姑區(qū)事業(yè)單位招聘博士人才100人重點基礎(chǔ)提升(共500題)附帶答案詳解-1
- 2025年上半年遼寧大連莊河市部分醫(yī)療機構(gòu)招聘事業(yè)編制專業(yè)技術(shù)人員54人重點基礎(chǔ)提升(共500題)附帶答案詳解-1
- 2025年上半年贛州市通天巖風(fēng)景名勝區(qū)管理局招考易考易錯模擬試題(共500題)試卷后附參考答案
- 2025年上半年資陽都江堰灌區(qū)毗河供水工程資陽市籌建辦公室招考易考易錯模擬試題(共500題)試卷后附參考答案
- 2025年上半年貴州黔西南州人民政府辦公室歸口管理事業(yè)單位招聘6人重點基礎(chǔ)提升(共500題)附帶答案詳解-1
- 2024年08月云南省農(nóng)村信用社秋季校園招考750名工作人員筆試歷年參考題庫附帶答案詳解
- 防詐騙安全知識培訓(xùn)課件
- 心肺復(fù)蘇課件2024
- 2024年股東股權(quán)繼承轉(zhuǎn)讓協(xié)議3篇
- 2024-2025學(xué)年江蘇省南京市高二上冊期末數(shù)學(xué)檢測試卷(含解析)
- 四川省名校2025屆高三第二次模擬考試英語試卷含解析
- 《城鎮(zhèn)燃?xì)忸I(lǐng)域重大隱患判定指導(dǎo)手冊》專題培訓(xùn)
- 湖南財政經(jīng)濟(jì)學(xué)院專升本管理學(xué)真題
- 考研有機化學(xué)重點
- 全國身份證前六位、區(qū)號、郵編-編碼大全
- 《GPU體系結(jié)構(gòu)》課件2
評論
0/150
提交評論