使用eclipse直接編譯jni並且使用jni

在前面的博客中介紹了在Android下使用jni,博客中介紹的方法比較麻煩,這篇博客介紹的方法會簡單一點,並且會介紹一些技巧

第一步:使用eclipse創建一個Android工程,我就工程的名字命名爲Hellojni1

第二步:修改activity_main.xml文件

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="調用c語言的本地方法" 
        android:onClick="click"/>

</RelativeLayout>

第三步:修改MainActivity.java中的代碼

package com.example.hellojni1;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;

public class MainActivity extends Activity {

	 static {    
         
         //加載打包完畢的so類庫    
         System.loadLibrary("hello");    
     }    
	 
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
	}
	
	public void click(View view) {
		
		//使用吐司對話框顯示c語言代碼中的函數helloC的返回值
		Toast.makeText(this, helloC(), Toast.LENGTH_SHORT).show();
	}
	
	//定義一個本地方法,方法體由c語言實現
	public native String helloC();
}

第四步:展開MainActivity.java文件



第五步:選擇Window



第六步:選擇Preferences



第七步:選擇Android——選擇NDK



第八步:設置NDK的路徑爲爲NDK的存放路徑,設置完成後單擊OK



第九步:選中創建好的Android工程——單擊鼠標右鍵——選擇Android Tools——Add Native Support



第十步:設置類庫的名稱爲hello(其實就是生成的so文件的文件名)



第十一步:選中MainActivity,並且單擊鼠標右鍵,選擇Copy Qualified Name,此時將MainActivity的完整的包名加類名複製到了剪貼板上



第十二步:打開命令行,進入到工程目錄下的src目錄下



第十三步:在命令行中輸入javah + com.example.hellojni1.MainActivity(第六步中選擇Copy Qualified Name複製好的完整的包名)



第十四步:刷新一下Android工程,此時可以看到在src文件夾下多了一個com_example_hellojni1_MainActivity.h文件



第十五步:打開com_example_hellojni1_MainActivity.h文件,並且將com_example_hellojni1_MainActivity.h文件中的下圖的代碼拷貝到hello.cpp文件中



第十六步:將hello.cpp改成hello.c,並且修改hello.c中到代碼

#include <jni.h>

JNIEXPORT jstring JNICALL Java_com_example_hellojni1_MainActivity_helloC(JNIEnv env*, jobject obj)
{
	char* str = "hello world jni !";

	//把c語言的字符串轉換成java的字符串
	jstring jstr = (*env)->NewStringUTF(env, str);

	return jstr;
}

第十七步:修改Android.mk中的代碼

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

#設置編譯生成的類庫叫什麼名字
LOCAL_MODULE    := hello

#要編譯的c文件
LOCAL_SRC_FILES := hello.c

include $(BUILD_SHARED_LIBRARY)

第十八步:在jni文件夾下新建一個Application.mk文件用於設置編譯成那個版本的類庫

#生成intel架構的so文件,默認狀態下只能生成arm架構的so文件  
APP_ABI := armeabi armeabi-v7a x86  


最後一步:編譯運行,執行成功後界面上會出現一個調用c代碼的按鈕,點擊按鈕後會調用用c語言寫的一段字符串,表示編譯運行成功

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