安卓動態連結程式庫系列-編寫so

來源:互聯網
上載者:User

標籤:

閑話少說,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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.