首先明白.so分為兩種,一種是linux下的.so,一種是NDK下的.so;本文主要講解加載后一種.so
先來了解如何生成.so;
1、建立jni文件夾,創建android.mk和main.cpp文件
.mk內容如下:
LOCAL_PATH := $(call my-dir)
# compile VitClient.so
include $(CLEAR_VARS)
LOCAL_MODULE := libgame //.so名稱
LOCAL_SRC_FILES := main.cpp //需要直接的.cpp/.c文件
LOCAL_C_INCLUDES := $(LOCAL_PATH)/../include
include $(BUILD_SHARED_LIBRARY)
#include $(BUILD_STATIC_LIBRARY)
.cpp 文件內容:
extern "C"
{
int AddNum(int a,int b)
{
return a+b;
}
}
2、在jni同級目錄創建build_native.sh腳本
內容如下:
# set params
NDK_ROOT_LOCAL=/Users/wuwuyuan/Desktop/android-sdk-macosx/android-ndk-r7b //ndk 路徑 設置成自己的
# build
# NDK 編譯參數
# V=1 顯示編譯詳細信息
# -B 強制重新編譯
$NDK_ROOT_LOCAL/ndk-build
3、mac下命令行 執行 sh build_native.sh 結果如圖:
4、在unity中穿件android工程,新建Plugins/Android 將libgame.so 放在之下
5、編輯C# 腳本:
using System.Runtime.InteropServices;
public class PluginImport : MonoBehaviour {
[DllImport ("game")] //省略掉lib前綴和.so 后綴
private static extern int AddNum(int a,int b);
void Start () {
Debug.Log("wwwwwww:"+AddNum(1,1));
}
}
6、在android設備上可以看到打印出 wwwwwww:2
備注:必須在android真機或模擬器上能看到效果,在pc或mac上會報異常
補充:如何在mac下用NDK編.so
cd 到當前eclipse工程根目錄,在根目錄執行../android-ndk-r7b/ndk-build
編譯過程:Compile++ arm : shadowmapping <= BaseGLSLProgram.cpp
Compile++ arm : shadowmapping <= bitmap.cpp
Compile++ arm : shadowmapping <= button.cpp
Compile++ arm : shadowmapping <= main.cpp
Compile thumb : android_native_app_glue <= android_native_app_glue.c
StaticLibrary : libandroid_native_app_glue.a
Prebuilt : libgnustl_static.a <= <NDK>/sources/cxx-stl/gnu-libstdc++/libs/armeabi/