Android mk方式使用動態庫和靜態庫

centos ndk下載和編譯動態庫 靜態庫

Mac使用iTerm2 rz sz和騰訊雲互傳文件

將libget.a 和 libget.so 添加到ndkdir目錄中,並創建Android.mk文件
在這裏插入圖片描述
配置build.gradle
在這裏插入圖片描述

 externalNativeBuild {
            ndkBuild {
                abiFilters 'armeabi-v7a'
                // abiFilters 'x86'
            }
        }
    // 手動寫一個mk 的構建方式
    externalNativeBuild {
        ndkBuild {
            path 'src/main/ndkdir/Android.mk'
        }
    }

    ndkVersion = '21.0.6113669'

login.c

#include <jni.h>
#include <android/log.h>

// 聲明一個函數
extern int get();

JNIEXPORT void JNICALL Java_com_hongx_jnitest_MainActivity_getMyLibMethod
(JNIEnv * env, jobject inst) {
    __android_log_print(ANDROID_LOG_DEBUG, "Hongx", "tesegetMEthod:%d", get());

}

Android.mk

# 這裏面能夠決定編譯 Login.c

# 1.源文件在的位置。宏函數 my-dir 返回當前目錄(包含 Android.mk 文件本身的目錄)的路徑。
# LOCAL_PATH 其實就是Android.mk文件本身的目錄的路徑
LOCAL_PATH := $(call my-dir)

$(info "LOCAL_PATH:======== ${LOCAL_PATH}")

# 2.清理
include $(CLEAR_VARS)

# TODO 預編譯庫的引入 == 提前編譯好的庫
LOCAL_MODULE := get

LOCAL_SRC_FILES := libget.a
# LOCAL_SRC_FILES := libget.so

# 預編譯共享庫的Makeifle腳本
include $(PREBUILT_STATIC_LIBRARY)
#include $(PREBUILT_SHARED_LIBRARY)

#引入其他makefile文件。CLEAR_VARS 變量指向特殊 GNU Makefile,可爲您清除許多 LOCAL_XXX 變量
#不會清理 LOCAL_PATH 變量
include $(CLEAR_VARS)
# TODO end

# 3.指定庫名字
#存儲您要構建的模塊的名稱 每個模塊名稱必須唯一,且不含任何空格
#如果模塊名稱的開頭已是 lib,則構建系統不會附加額外的前綴 lib;而是按原樣採用模塊名稱,並添加 .so 擴展名。
LOCAL_MODULE := MyLoginJar

#包含要構建到模塊中的 C 和/或 C++ 源文件列表 以空格分開
LOCAL_SRC_FILES := Login.c \
Test.c

# TODO 開始鏈接進來
# 靜態庫的鏈接
LOCAL_STATIC_LIBRARIES := get
# 動態庫鏈接
# LOCAL_SHARED_LIBRARIES := get

# 導入 log
#LOCAL_LDLIBS := -llog
LOCAL_LDLIBS    := -lm -llog

# 4.動態庫
#構建動態庫BUILD_SHARED_LIBRARY 最後要動態庫
include $(BUILD_SHARED_LIBRARY)

MainActivity

public class MainActivity extends AppCompatActivity {

    static {
        System.loadLibrary("MyLoginJar"); // 加載總庫
    }

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

        getMyLibMethod();;
    }

    public native void getMyLibMethod();
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章