標籤:
閑話少說,so的修改,重要性大家都知道,俗話說,磨刀不誤砍柴功,不寫寫怎麼逆的回來,這裡從頭編寫so檔案,分析so檔案,修改so檔案
今天先講講編寫so
技術準備:
jdk環境
jre環境
安卓開發環境
ndk開發環境
1.建立個工程,隨便建 主函數介面入口 先這樣放著
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
2.建立個類 我這裡命名為JniGg
代碼如下:這裡的gg-jni代表的so名字 ggprinthello是我想要調的方法名
3.產生.h
首先先進入工程所在目錄,然後輸入如下命令
javah -classpath bin/classes -d jni 包名+類名
結束後 查看下jni目錄有沒有成功產生 (如下的是自動產生的)
4.編寫C代碼
右鍵jni檔案夾 建立file 命名為gg-jni.c
敲入代碼
#include "com_testso_JniGg.h" //前面的頭
JNIEXPORT jstring JNICALL Java_com_testsoxxin_JniGg_ggPrintHello ###提供一個可供調用的方法
(JNIEnv * env, jobject this)
{
return (*env)->NewStringUTF(env, "Hello from GG-jni2222222222 !");#####返回字串
}
5.Android.mk編寫
依舊是建立file 命名為Android.mk
內容如下
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE :=JniGg //名字要對齊
LOCAL_SRC_FILES := JniGg .c //名字要對齊 上面是.c這裡就要.c 上面是CPP這裡也要是cpp
include $(BUILD_SHARED_LIBRARY)
6.ndk-build
依舊是在工程目錄下 輸入ndk-build 產生so
如下就是產生成功了
那個警報就忽略吧
7.調用
然後回到安卓的mainactivity
輸入代碼
TextView tv=new TextView(this);
tv.setText(JniGg.ggPrintHello());
setContentView(tv);
也就是建立個文字框,調用so,至此大工告成
8.運行效果
安卓動態連結程式庫系列-編寫so