<del id="d4fwx"><form id="d4fwx"></form></del>
      <del id="d4fwx"><form id="d4fwx"></form></del><del id="d4fwx"><form id="d4fwx"></form></del>

            <code id="d4fwx"><abbr id="d4fwx"></abbr></code>
          • soandroid的簡單介紹

            如何加載so文件 android

            android中加載so文件:

            創(chuàng)新互聯(lián)公司是一家專業(yè)提供海陵企業(yè)網站建設,專注與成都做網站、網站建設、H5響應式網站、小程序制作等業(yè)務。10年已為海陵眾多企業(yè)、政府機構等服務。創(chuàng)新互聯(lián)專業(yè)網絡公司優(yōu)惠進行中。

            在Android中調用動態(tài)庫文件(*.so)都是通過jni的方式,而且往往在apk或jar包中調用so文件時,都要將對應so文件打包進apk或jar包,工程目錄下圖:

            Android中加載so文件的提供的API:

            void System.load(String pathName);

            說明:

            1、pathName:文件名+文件路勁;

            2、該方法調用成功后so文件中的導出函數(shù)都將插入的系統(tǒng)提供的一個映射表(類型Map);

            3、具體代碼如下:

            try {?

            String localPath = Environment.getExternalStorageDirectory() + path;?

            Log.v(TAG, "LazyBandingLib localPath:" + localPath);

            String[] tokens = mPatterns.split(path);?

            if (null == tokens || tokens.length = 0?

            || tokens[tokens.length - 1] == "") {?

            Log.v(TAG, "非法的文件路徑!");?

            return -3;?

            }?

            // 開辟一個輸入流?

            File inFile = new File(localPath);?

            // 判斷需加載的文件是否存在?

            if (!inFile.exists()) {?

            // 下載遠程驅動文件?

            Log.v(TAG, inFile.getAbsolutePath() + " is not fond!");?

            return 1;?

            }?

            FileInputStream fis = new FileInputStream(inFile);

            File dir = context.getDir("libs", Context.MODE_PRIVATE);?

            // 獲取驅動文件輸出流?

            File soFile = new File(dir, tokens[tokens.length - 1]);?

            if (!soFile.exists()) {?

            Log.v(TAG, "### " + soFile.getAbsolutePath() + " is not exists");?

            FileOutputStream fos = new FileOutputStream(soFile);?

            Log.v(TAG, "FileOutputStream:" + fos.toString() + ",tokens:"?

            + tokens[tokens.length - 1]);

            // 字節(jié)數(shù)組輸出流,寫入到內存中(ram)?

            ByteArrayOutputStream baos = new ByteArrayOutputStream();?

            byte[] buffer = new byte[1024];?

            int len = -1;?

            while ((len = fis.read(buffer)) != -1) {?

            baos.write(buffer, 0, len);?

            }?

            // 從內存到寫入到具體文件?

            fos.write(baos.toByteArray());?

            // 關閉文件流?

            baos.close();?

            fos.close();?

            }?

            fis.close();?

            Log.v(TAG, "### System.load start");?

            // 加載外設驅動?

            System.load(soFile.getAbsolutePath());?

            Log.v(TAG, "### System.load End");

            return 0;

            } catch (Exception e) {?

            Log.v(TAG, "Exception?? " + e.getMessage());?

            e.printStackTrace();?

            return -1;

            }

            如何獲取android 系統(tǒng)的so庫

            android ndk調用第三方的so庫文件的步驟如下:

            1.將SO文件直接放到libs/armeabi下,然后代碼中System.loadLibrary("xxx");再public native static int xxx_xxx_xxx();接下來就可以直接調用xxx_xxx_xxx()方法;

            2.第二種方案,創(chuàng)建自己的SO文件,在自己的SO文件里調用第三方SO,再在程序中調用自己的SO,這種比較復雜,需要建java類文件,生成.h文件,編寫C源文件include之前生成的.h文件并實現(xiàn)相應方法,最后用android NDK開發(fā)包中的ndk-build腳本生成對應的.so共享庫;

            Android SO什么意思

            您好,您可能指的是Android OS。

            Android OS其實就是安卓操作系統(tǒng)的名字。Android是一種基于Linux的自由及開放源代碼的操作系統(tǒng),主要使用于移動設備,如智能手機和平板電腦,由Google公司和開放手機聯(lián)盟領導及開發(fā)。尚未有統(tǒng)一中文名稱,中國大陸地區(qū)較多人使用“安卓”或“安致”。Android操作系統(tǒng)最初由Andy Rubin開發(fā),主要支持手機。2005年8月由Google收購注資。2007年11月,Google與84家硬件制造商、軟件開發(fā)商及電信營運商組建開放手機聯(lián)盟共同研發(fā)改良Android系統(tǒng)。隨后Google以Apache開源許可證的授權方式,發(fā)布了Android的源代碼。第一部Android智能手機發(fā)布于2008年10月。Android逐漸擴展到平板電腦及其他領域上,如電視、數(shù)碼相機、游戲機等。2011年第一季度,Android在全球的市場份額首次超過塞班系統(tǒng),躍居全球第一。 2013年的第四季度,Android平臺手機的全球市場份額已經達到78.1%。2013年09月24日谷歌開發(fā)的操作系統(tǒng)Android在迎來了5歲生日,全世界采用這款系統(tǒng)的設備數(shù)量已經達到10億臺。

            如果您確定您問的是Android SO的話,下面給出解釋。

            Android SO是Android編程中用到的so類型的文件,是一個c++的函數(shù)庫,在android的JNI中,是先將相應的C語言打包成so庫導入到lib文件夾中調用的。

            參考:百度百科。

            android項目中如何加載已有so庫

            android項目中如何加載已有so庫方法:

            1、在項目根目錄下建立文件夾libs/armeabi文件夾。

            2、將so庫放入libs/armeabi文件夾注意事項:

            (1)如果采用靜態(tài)注冊的方式請注意C文件中嚴格按照命名規(guī)則Java_packageName_className_method()的方式命名。

            (2)在Android項目中建立同上述命名規(guī)則中packageName中相同的包名,在此包名下建立同上述命名規(guī)則中className相同的類名。

            (3)在className聲明native方法。

            (4)程序中加載so庫System.loadLibrary。(data/data/xxx.xxx.xxx/lib/xx.so)或者System.loadLibrary(xx),例如:System.loadLibrary(data/data/com.dtBank.app.service/lib/libjnixcld.so)。

            android so文件怎么用

            相信很多朋友在使用Android?studio開發(fā)中,遇到過如何引入第三方so文件的問題,然而第三方官方僅僅給出了ADT環(huán)境下的集成方式。

            Android studio中默認使用的是gradle編譯方式,與ADT編輯方式不一樣,那么so文件應當如何引入呢?

            其實很簡單。這里以集成JPUSH為例,看一下so文件如何引入到編譯環(huán)境,最終到JNI直接可以調用該so文件。

            首先,在我們的Module的根目錄中建立libs目錄,將jpush集成SDK中的so文件分別拷入,截圖如下:

            然后就是編寫我們的build.gradle文件。

            關于so文件引入的配置很簡單,代碼配置如下:

            [html]?view plain?copy?print?

            task?nativeLibsToJar(type:?Zip,?description:?"create?a?jar?archive?of?the?native?libs")?{

            destinationDir?file("$projectDir/libs")

            baseName?"Native_Libs2"

            extension?"jar"

            from?fileTree(dir:?"libs",?include:?"**/*.so")

            into?"lib"

            }

            tasks.withType(JavaCompile)?{

            compileTask?-?compileTask.dependsOn(nativeLibsToJar)

            }

            自定義一個任務,在其中指定項目所依賴的so文件的目錄,這里用了**/*.so來寫,為了省事,指定需要拷入的目錄 into "lib",那么動態(tài)運行庫就被拷入到lib目錄中。

            完整的build.gradle文件如下:

            [html]?view plain?copy?print?

            apply?plugin:?'com.android.application'

            android?{

            compileSdkVersion?21

            buildToolsVersion?"21.1.0"

            defaultConfig?{

            applicationId?"com.wujay.footerballstar"

            minSdkVersion?8

            targetSdkVersion?21

            versionCode?1

            versionName?"1.0"

            }

            buildTypes?{

            release?{

            runProguard?false

            proguardFiles?getDefaultProguardFile('proguard-android.txt'),?'proguard-rules.pro'

            }

            }

            task?nativeLibsToJar(type:?Zip,?description:?"create?a?jar?archive?of?the?native?libs")?{

            destinationDir?file("$projectDir/libs")

            baseName?"Native_Libs2"

            extension?"jar"

            from?fileTree(dir:?"libs",?include:?"**/*.so")

            into?"lib"

            }

            tasks.withType(JavaCompile)?{

            compileTask?-?compileTask.dependsOn(nativeLibsToJar)

            }

            }

            dependencies?{

            compile?fileTree(dir:?'libs',?include:?['*.jar'])

            compile?'com.android.support:appcompat-v7:21.0.0'

            compile?files('libs/jpush-sdk-release1.7.2.jar')

            compile?files('libs/umeng_sdk.jar')

            compile?files('libs/libammsdk.jar')

            }

            本文題目:soandroid的簡單介紹
            文章源于:http://www.jbt999.com/article34/phigpe.html

            成都網站建設公司_創(chuàng)新互聯(lián),為您提供網站收錄、關鍵詞優(yōu)化網站設計、網頁設計公司響應式網站、App開發(fā)

            廣告

            聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:[email protected]。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

            小程序開發(fā)

              <del id="d4fwx"><form id="d4fwx"></form></del>
              <del id="d4fwx"><form id="d4fwx"></form></del><del id="d4fwx"><form id="d4fwx"></form></del>

                    <code id="d4fwx"><abbr id="d4fwx"></abbr></code>
                  • 欧美操逼操逼操 | 岳乳丰满一区二区三区 | 亚洲在线资源 | 亚洲操操| SM国产|