Android NDK(一) ndk-build構建工具進行NDK開發

本文目錄java

  1、androidstudio環境android

  2、快捷鍵配置app

  3、新建項目ide

  4、NDK開發工具

  5、so文件編譯gradle

 

1、 androidstudio的環境

在SDK Tools中安裝NDK開發環境(File > Settings > Appearance & Behavior > System Settings > Android SDK > SDK Tools):  NDKui

        安裝NDK開發環境

2、快捷鍵的配置  

打開File > Settings > Tools > External Tools選項,點擊【+】按鈕添加生成jni頭文件以及ndk-build命令的快捷工具:編碼

  ①生成頭文件  spa

生成頭文件

  Name:javah-jni.net

      工具名稱

  Program:$JDKPath$/bin/javah

      javah所在的路徑,$JDKPath$表明在環境變量中配置的JDK路徑。

  Parameters:-jni -encoding UTF-8 -d $ModuleFileDir$\src\main\jni $FileClass$

     命令參數:

      -jni表明生成JNI樣式的標頭文件,文件名爲當前包名+類名($FileClass$)

      •-encoding表明編碼格式爲UTF-8

      •-d表明指定頭文件的輸出路徑爲jni目錄($ModuleFileDir$\src\main\jni )

  Working directory:$ModuleFileDir$\src\main\java

     工做目錄,$ModuleFileDir$爲當前module的路徑。

  ②NDK構建

  ndk-build的配置和javah-jni相似,其中C:\Tools\NDK\android-ndk-r14b\ndk-build.cmd爲ndk-build構建工具的路徑,須要按照實際NDK安裝路徑進行修改。

③如何調用

右擊項目選擇External Tools:

使用快捷工具

3、新建一個普通的項目   

      ①在main目錄下新建jni目錄,在此目錄下編寫原生代碼:
   ②在main目錄下新建jniLibs目錄,此目錄爲Android Stuido加載so文件的默認目錄,看下項目結構

          項目結構

4、NDK開發

 ①MainActivity

public class MainActivity extends AppCompatActivity {

    // 加載native-lib,不加lib前綴
    static {
        System.loadLibrary("native-lib");
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // 將獲取的字符串顯示在TextView上
        TextView tv = findViewById(R.id.sample_text);
        tv.setText(stringFromJNI());
    }

    /**
     * native-lib中的原生方法
     */
    public native String stringFromJNI();
}
View Code

 ②對着MainActivity的類名右擊鼠標,選擇External Tools > javah-jni,控制檯執行完命令後,會在jni目錄生成一個頭文件:
 ③jni目錄中新建cpp類native-lib.cpp,引用上文中生成的頭文件,返回一個字符串給Java層,
 ④接着在jni目錄下建立Android.mk和Application.mk配置文件

Android.mk

# 當前路徑
LOCAL_PATH := $(call my-dir)

# 清除LOCAL_XXX變量
include $(CLEAR_VARS)

# 原生庫名稱
LOCAL_MODULE := native-lib

# 原生代碼文件
LOCAL_SRC_FILES =: native-lib.cpp

# 編譯動態庫
include $(BUILD_SHARED_LIBRARY)

Application.mk

# 原生庫名稱
APP_MODULES := native-lib

# 指定機器指令集
APP_ABI := armeabi armeabi-v7a arm64-v8a x86 x86_64 mips mips64

⑤在app的build.gradle文件中關聯Android.mk(至關於執行了【Link C++ Project with Gradle】)

android {
    ...

    externalNativeBuild {
        ndkBuild {
            path 'src/main/jni/Android.mk'
        }
    }

5、so文件編譯  

①對着jni目錄右擊鼠標,選擇External Tools > ndk-build,會在main目錄下生成libs和obj目錄,編譯出的so文件就在libs目錄下  

②將so文件拷貝到jniLibs目錄下就能夠正常使用了,也能夠在app的build.gradle文件中設置so文件的路徑。

 注意:編譯出的so文件就至關於java中的jar包,上文中的jni就至關於library,二者不要重複使用。

 

 原文連接:https://blog.csdn.net/kong_gu_you_lan/article/details/79146817

相關文章
相關標籤/搜索