1. 程式人生 > >用NDK生成so給第三方用

用NDK生成so給第三方用

HA 添加 string += mis AD 文件 sha cocos2d

參考了https://blog.csdn.net/zi413293813/article/details/50074239 然後自己重新整理補充

我用的ndk-r10d

ndk下載地址http://developer.android.com/sdk/ndk/index.html

eclipse 開發環境

1、用eclipse創建一個android項目

2、選中項目右鍵->Properties->Builders->New->選中Program 點擊OK->各種配置文字太難描述直接上圖

技術分享圖片

配置了ndk-build 的路徑還有剛剛創建的那個android項目

技術分享圖片

打勾

技術分享圖片

Specify Resources 瀏覽找到剛剛創建的android項目就可以了,項目配置就這些

在src目錄先創建一個class文件,內容如下

public class JniClient {
    static public native String AddStr(String strA, String strB);
    static public native int AddInt(int a, int b);
}

找到JniClient.java(剛剛創建的那個類)所在位置,右鍵打開cmd或者powershell 執行命令javac JniClient.java

在項進入到src磁盤目錄右鍵打開cmd或者powershell 執行命令 javah com.example.mtest.JniClient (這個需要根據自己項目實際路徑而定)

這樣就生成了com_example_mtest_JniClient.h 頭文件內容就不展示了,最前面連接地址裏面有

然後手動創建一個com_example_mtest_JniClient.c 最前面連接地址裏面有 ,編輯器有問題貼不出來

把這個頭文件和源文件剪切到 jni 目錄(項目根目錄下 沒有就自己創建)

技術分享圖片

在jni目錄裏面添加一個Android.m

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE :=_SRC_FILES := com_example_mtest_JniClient.c
include $(BUILD_SHARED_LIBRARY)

以及Application.mk

#使用STL庫
APP_STL := gnustl_static
#兼容老的語法,使一些錯誤降為警告
APP_CPPFLAGS += -fpermissive
#選擇平臺,如果都需要生成用空格隔開
APP_ABI := armeabi armeabi-v7a 

刷新項目就會在lib目錄生成對應的 so 文件

下面寫一下如何使用剛剛生成的so庫

重新新建一個android 項目 我這裏用的是cocos2d-x的一個遊戲項目

把生成的so放到新的android項目的jni目錄下

技術分享圖片

在這個新項目Android.mk裏面添加如下內容

include $(CLEAR_VARS)
LOCAL_MODULE := libTestNdk
LOCAL_SRC_FILES := TestNdk/$(TARGET_ARCH_ABI)/libTestNdk.so
include $(PREBUILT_SHARED_LIBRARY)

LOCAL_STATIC_LIBRARIES += libTestNdk

還不能直接使用,回到第一個創建的android項目 把JniClient.java這個文件打成一個jar包

我是在src目錄下powershell裏面執行jar -cvf mtest.jar com\example\mtest\JniClient.class

生成mtest.jar包 ,不過bin目錄裏面好像有自動生成

把這個jar包放入第二個項目lib裏面,在appactivity裏面添加如下代碼

技術分享圖片

然後在onCreate()方法裏面調用

技術分享圖片

在手機上運行項目可以看到如下輸出

.748: I/System.out(5703): ...abelmou...HelloWorld from JNI !

說明調用成功,寫得有點亂方便自己回顧

用NDK生成so給第三方用