Android NDK JNI 開發之旅03 so類庫 JAR包使用

做者簡介

微信公衆號(高質量文章推送):走向全棧工程師前端

做者:陳博易java

聲明:本文是我的原創,未經容許請勿轉載android

商業合做請在微信公衆號回覆:聯繫方式c++


build-->make project結果展現

項目運行結果展現

前言


  1. 爲何要學習JNI呢,個人回答是:由於我好學!哈哈哈。
  2. 用Jar包的方式加載so類庫的方式比較優雅。在使用高德地圖開發地圖模塊時,也是這個套路,導入高德的Jar包和一堆的類庫

環境以及工具


  1. Android項目:AndroidStudio3.0
  2. NDK
  3. CMake3.6.4
  4. LLDB3.0

總體步驟


  1. 建立so類庫的library
  2. library生成對應的JAR包和so類庫
  3. 使用so類庫項目介紹

核心步驟解讀


1. 建立so類庫的library

將上篇文章的這幾個文件複製到library項目相對應目錄中,別說你不知道在哪裏,那就看個人前面幾篇文章,去找找git

jnilibrary/build.gradle代碼展現github

apply plugin: 'com.android.library'

android {
    compileSdkVersion 26



    defaultConfig {
        minSdkVersion 15
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        //Gradle 文件配置對CMake的配置
        externalNativeBuild {
            cmake {
                cppFlags ""
            }
        }
        //Gradle 構建並打包某個特定abi體系架構下的.so庫
        ndk {
            // Specifies the ABI configurations of your native
            // libraries Gradle should build and package with your APK.
            abiFilters 'x86', 'x86_64', 'armeabi', 'armeabi-v7a',
                    'arm64-v8a','mips','mips64'

        }
    }
    //Gradle 文件配置對CMake的配置
    externalNativeBuild {
        cmake {
            path "CMakeLists.txt"
        }
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])

    implementation 'com.android.support:appcompat-v7:26.1.0'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.1'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
}



def JAR_NAME = "JniUtils";//定義jar name
def JAR_VERSION = "_V1.0";//定義jar version
def JARDestinationPath = "build";//定義輸出路徑
def zipJarFile = file('build/intermediates/bundles/release/classes.jar')//jar包來源

task deleteBuild(type: Delete) {
    //刪除以前生成的jar包
    delete JARDestinationPath + JAR_NAME + JAR_VERSION + ".jar"
}

task makeJar(type: Jar) {
    from zipTree(zipJarFile)//jar包來源
    from fileTree(dir: 'src/main',includes: ['assets/**'])//assets文件的內容打包到jar包裏
    baseName = JAR_NAME + JAR_VERSION//jar包輸出名稱
    destinationDir = file(JARDestinationPath)//jar包輸出路徑
}

makeJar.dependsOn(deleteBuild, build)

複製代碼
2. 生成對應的JAR包和so類庫

jnilibrary/build.gradle的task不能忽視了,重要的事情說三遍。。。編程

生成JAR方式一:雙擊makeJar後端

生成JAR方式二:在terminal 終端下輸入gradlew makeJar命令bash

編譯完成後會提示微信

最終生成JAR 包和 so類庫

3. 使用so類庫項目介紹

將類庫中的JAR包和so複製代主項目的libs目錄下

app/build.gradle展現

apply plugin: 'com.android.application'

android {
    compileSdkVersion 26
    defaultConfig {
    }
    buildTypes {
    }
    sourceSets {
        main {
            //加載對應類庫:若是是將so放在app/libs則
            //須要jniLibs.srcDirs = ['libs'],若是是將so放在
            // app/src/main/jniLibs,則須要jniLibs.srcDirs = ['jniLibs']
            // 也能夠刪除,由於AndroidStudio中新建項目時,系統默認爲咱們配置好了
            // gradle,因此係統默認就會到這個目錄下找so包
            jniLibs.srcDirs = ['libs']
        }
    }
}
dependencies {
}
複製代碼

使用就是這麼簡單

總結


  1. 請你們多關注關注我。
  2. 接下來繼續深刻ndk jni這一塊的知識以及基本的c c++基本知識,但願你們多多支持

Android NDK JNI 開發 環境搭建入門篇

Android NDK JNI 開發之旅 so類庫 簡單使用篇

我的相關教程

各類大佬推薦的編程視頻資源分享

Android 微信 支付寶支付,2行代碼實現支付

Android前端 Java後端 集成支付寶支付

postman使用 Android java後端 接口調試工具

Android抓包 Charles http接口調試

消息推送 Android java後端集成小米推送

如何導入簡單的java項目-IntelliJ IDEA

請關注我(高質量文章推送)

源碼地址———關注微信公衆號,回覆:ndk類庫使用02

Android NDK JNI 開發之旅 開源項目

長按二維碼「識別」關注或者掃一掃
相關文章
相關標籤/搜索