Android Studio 3.5版本JNI生成SO文件詳解
學(xué)習(xí)在于記錄,把自己不懂得容易忘記得記錄下,才是最好得選擇。
廢話不多說,想要在Android開發(fā)中嵌入c/c++代碼,直接開始如下步驟
1、創(chuàng)建需要調(diào)用的Java類
在你某個(gè)指定的包下創(chuàng)建如下類
package com.journey.org;
public class JniHello{
static {
System.loadLibrary("JniHello")
}
public static native String welcomeJniStudy();
}
2、創(chuàng)建通用工具
首先選擇File->Settings->Tools->External Tools 具體如下圖


2.1、創(chuàng)建javah工具

其具體設(shè)置如下
Program:$JDKPath$\bin\javah.exe Arguments:-classpath . -jni -d $ModuleFileDir$/src/main/jni $FileClass$ Working directory:$ModuleFileDir$\src\main\java
2.2、創(chuàng)建ndk-build工具

其具體設(shè)置如下
Program:D:\workpalce\AndroidSDK\ndk-bundle\build\ndk-build.cmd // 安裝ndk的路徑 Arguments: Working directory:$ModuleFileDir$\src\main
3、通過通用工具javah生成C代碼
其步驟如下

就會(huì)在jni文件夾下生成相應(yīng)的c文件

4、創(chuàng)建Android.mk和Application.mk
在生成的c文件下創(chuàng)建上述兩個(gè)文件

Android.mk
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_LDLIBS += -llog LOCAL_LDLIBS +=-lm LOCAL_MODULE := JniHello LOCAL_SRC_FILES =: JniHello.cpp # 實(shí)現(xiàn)c代碼文件的名字 include $(BUILD_SHARED_LIBRARY)
Application.mk
APP_MODULES := JniHello APP_ABI := all
5、 實(shí)現(xiàn)c中的方法
步驟如下:



具體代碼如下:
#include "com_journey_org_JniHello.h"
JNIEXPORT jstring JNICALL Java_com_journey_org_JniHello_welcomeJniStudy(JNIEnv *env, jclass jclass){
return env->NewStringUTF("welcome to study jni")
}
6、配置文件
需要在module下的build.gradle中配置ndk相關(guān)內(nèi)容,具體如下

ndk{
moduleName "JniHello"
//abiFilters \"armeabi-v7a", "x86" //輸出指定abi下的so庫
}
sourceSets.main {
jni.srcDirs = []
jniLibs.srcDir "src/main/libs"
}
7、生成so文件
按如下步驟選擇

就會(huì)在libs文件夾下生成相應(yīng)的so文件

8、測試調(diào)用


以上就是Android Studio 3.5版本JNI生成SO文件詳解的詳細(xì)內(nèi)容,更多關(guān)于JNI生成SO的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
深入淺出RxJava+Retrofit+OkHttp網(wǎng)絡(luò)請求
本篇文章主要介紹了深入淺出RxJava+Retrofit+OkHttp網(wǎng)絡(luò)請求,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-11-11
詳談android 6.0 fuse文件系統(tǒng)的掛載和卸載問題
今天小編就為大家分享一篇詳談android 6.0 fuse文件系統(tǒng)的掛載和卸載問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-08-08
安卓開發(fā)之FragmentPagerAdapter和FragmentStatePagerAdapter詳解
這篇文章主要介紹了安卓開發(fā)之FragmentPagerAdapter和FragmentStatePagerAdapter詳解的相關(guān)資料,需要的朋友可以參考下2022-08-08
Android多媒體應(yīng)用使用MediaPlayer播放音頻
這篇文章主要為大家詳細(xì)介紹了Android多媒體應(yīng)用使用MediaPlayer播放音頻,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-12-12
Android編程實(shí)現(xiàn)3D立體旋轉(zhuǎn)效果的實(shí)例代碼
這篇文章主要介紹了Android編程實(shí)現(xiàn)3D立體旋轉(zhuǎn)效果的實(shí)例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-05-05
android實(shí)現(xiàn)點(diǎn)擊圖片全屏展示效果
這篇文章主要為大家詳細(xì)介紹了android實(shí)現(xiàn)點(diǎn)擊圖片全屏展示效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-08-08
Android數(shù)據(jù)庫greenDAO配置與使用介紹
這篇文章主要介紹了Android集成GreenDao數(shù)據(jù)庫,使用數(shù)據(jù)庫存儲(chǔ)時(shí)候,一般都會(huì)使用一些第三方ORM框架,比如GreenDao,本文分幾步給大家介紹Android集成GreenDao數(shù)據(jù)庫的方法,需要的朋友可以參考下2023-03-03
Android采取BroadcastReceiver方式自動(dòng)獲取驗(yàn)證碼
這篇文章主要介紹了Android采取BroadcastReceiver方式自動(dòng)獲取驗(yàn)證碼,感興趣的小伙伴們可以參考一下2016-08-08

