1、然后就是編寫我們的build.gradle文件。
創(chuàng)新互聯(lián)公司服務(wù)項(xiàng)目包括巢湖網(wǎng)站建設(shè)、巢湖網(wǎng)站制作、巢湖網(wǎng)頁(yè)制作以及巢湖網(wǎng)絡(luò)營(yíng)銷策劃等。多年來(lái),我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,巢湖網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到巢湖省份的部分城市,未來(lái)相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
2、直接將locSDKSO拷進(jìn)去就行了,android.mk之中不做任何修改,因?yàn)?mk是編譯時(shí)用到的,相當(dāng)于一個(gè)索引,用于指定編譯哪些c文件,進(jìn)而生成so文件,而既然是.so,說(shuō)明文件已經(jīng)編譯過(guò)了,不需要再編譯的。
3、安卓手機(jī)打開(kāi).so文件需要下載Native Libs Monitor這個(gè)app,這個(gè)應(yīng)用可以幫助我們理解手機(jī)上安裝的APK用到了哪些.so文件,以及.so文件來(lái)源于哪些函數(shù)庫(kù)或者框架。我們也可以自己對(duì)app反編譯來(lái)獲取這些信息。
4、在即在linux編譯的庫(kù)需要使用android的編譯器,還有你在app里面直接system.loadlibrary就行了啊,網(wǎng)上調(diào)用JNI的很多,先寫好APP,然后用javah生成固定的函數(shù)頭文件,你進(jìn)行函數(shù)定義就行了。
5、so文件一樣。然后修改app的gradle中的android節(jié)點(diǎn)中加入:然后在main\java 建立生成.so文件那個(gè)項(xiàng)目的包名, 把NdkJniUtils文件copy過(guò)來(lái)。當(dāng)然封裝成jar包更好啦。到此完成,調(diào)用NdkJniUtils的方法即可獲得.so文件中的內(nèi)容。
private native String printJNI(String inputStr);} 復(fù)制代碼 這一步我們可以使用eclipse來(lái)生成一個(gè)App;因?yàn)閑clipse會(huì)自動(dòng)為我們編譯此Java文件,后面要是用到。
$cd ~/project/Android/JNITest/bin $cd ~/project/Android/JNITest/bin 我們用ls命令查看,可以看到bin目錄下有個(gè)classes目錄,其目錄結(jié)構(gòu)為classes/org/tonny/jni,即classes的子目錄結(jié)構(gòu)是android工程的包名org.tonny.jni。
方法/步驟 在android studio中新建默認(rèn)的android應(yīng)用app。點(diǎn)擊菜單欄的“Run”-“Attach debugger to Android process”。然后會(huì)打開(kāi)“Choose Process”窗口。選中要調(diào)試的進(jìn)程,然后點(diǎn)擊ok。
環(huán)境配置:eclipse要配置NDK插件和系統(tǒng)環(huán)境,我用的是WIN7,先去下載NDK,解壓后就是一個(gè)目錄,把路徑記住,去XP電腦配置下環(huán)境,就像配置Java環(huán)境一樣,把路徑寫到系統(tǒng)環(huán)境的PATH就好了(這樣就可以編譯JNI了)。
1、jni的目的應(yīng)該是讓java程序可以調(diào)用c/ c++的代碼。提高運(yùn)行性能,不會(huì)做太復(fù)雜的操作。如果要學(xué)怎么寫jni可以看android framework下 framework 的 jni的源碼。
2、JNI是通過(guò)Java調(diào)用C語(yǔ)言(或其他語(yǔ)言,一般是C),它的實(shí)現(xiàn)機(jī)制與代碼生成器不同(JNI是通過(guò)代碼調(diào)用實(shí)現(xiàn)功能,而代碼生成器是生成代碼,復(fù)制代碼進(jìn)行使用),由于C是底層語(yǔ)言,一些底層操作單靠Java無(wú)法實(shí)現(xiàn),所以才需要JNI。
3、這段代碼涉及到密鑰生成和加密操作,需要引入相關(guān)的加密庫(kù)來(lái)實(shí)現(xiàn)。在C語(yǔ)言中,可以使用 OpenSSL 庫(kù)來(lái)實(shí)現(xiàn)AES加密和解密操作。
4、步驟一:在java中定義一個(gè)c方法的接口 ,相當(dāng)于在java代碼中定義了一個(gè)接口 接口的實(shí)現(xiàn)方法是C語(yǔ)言實(shí)現(xiàn)的。
5、接下來(lái),則需要把c/c++接口的代碼文件編譯成共享庫(kù)(動(dòng)態(tài)庫(kù)).so文件,并放到模擬器的相關(guān)目錄下。最后,啟動(dòng)Java應(yīng)用程序,就可以看到最終效果了。
$cd ~/project/Android/JNITest/bin $cd ~/project/Android/JNITest/bin 我們用ls命令查看,可以看到bin目錄下有個(gè)classes目錄,其目錄結(jié)構(gòu)為classes/org/tonny/jni,即classes的子目錄結(jié)構(gòu)是android工程的包名org.tonny.jni。
用javah -jni為函數(shù)生成一個(gè)在java調(diào)用和實(shí)際的c函數(shù)之間的轉(zhuǎn)換存根,該存根通過(guò)從虛擬機(jī)棧中取出參數(shù)信息,并將其傳遞給已編譯的C函數(shù)來(lái)實(shí)現(xiàn)轉(zhuǎn)換。
Android中JNI是編譯so庫(kù)的源代碼,編譯成功后會(huì)生成SO庫(kù),android中最終是使用SO庫(kù)的。
總共有三種方式生成Jni頭文件,但歸根結(jié)底只有一種,只是操作方法不一樣,我在這里做一下記錄,方便下次使用。
但是不知道你的BYTE是自定義的什么類型,如果是char之類的,就另外想辦法轉(zhuǎn)換成jint。
NDK是一系列工具的集合。它提供了一系列的工具,幫助開(kāi)發(fā)者快速開(kāi)發(fā)C(或C++)的動(dòng)態(tài)庫(kù),并能自動(dòng)將so和java應(yīng)用一起打包成apk。這些工具對(duì)開(kāi)發(fā)者的幫助是巨大的。
android是安卓的縮寫,NDK是日本電波工業(yè)株式會(huì)社的英文縮寫,Android NDK 是在SDK前面又加上了“原生”二字,即Native Development Kit,因此又被Google稱為“NDK”。
NDK是用來(lái)給安卓手機(jī)開(kāi)發(fā)軟件用的,但是和SDK不同的是它用的是C語(yǔ)言,而SDK用的是Java語(yǔ)言。
選擇 ndk 自帶的例子 hello-jni ,我的位于E:\android-ndk-r5\samples\hello-jni( 根據(jù)具體的安裝位置而定 ) 。
(1)啟動(dòng)Eclipse,新建android工程 Project:JNITest Package:org.tonny.jni Activity:JNITest (2)編輯資源文件 編輯res/values/strings.xml文件如下: 編輯res/layout/main.xml文件 我們?cè)谥鹘缑嫔咸砑恿艘粋€(gè)EditText控件和一個(gè)Button控件。
首先在Android Studio工程的app目錄下創(chuàng)建整個(gè)jni目錄,jni目錄里寫Android.mk、Application.mk以及各類C/C++和匯編源文件。
Android Studio中jni存放在libs目錄下的armeabi目錄中。導(dǎo)入步驟:右鍵app目錄,find path,即打開(kāi)app目錄。在libs目錄下新建文件夾,名字為 armeabi,注意名字不能改。將.so庫(kù)文件復(fù)制到armeabi目錄下即可。
本文題目:android生成jni android生成apk文件出錯(cuò)
文章轉(zhuǎn)載:http://aaarwkj.com/article47/didoohj.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供域名注冊(cè)、服務(wù)器托管、外貿(mào)網(wǎng)站建設(shè)、定制開(kāi)發(fā)、網(wǎng)站維護(hù)、網(wǎng)頁(yè)設(shè)計(jì)公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)