編輯:關於android開發
新建Android項目,設置布局:
<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:onClick="click"
android:text="調用C函數" />
</RelativeLayout>
jni開發的步驟
①寫java代碼 聲明本地方法 用到native關鍵字 本地方法不用去實現
②項目根目錄下創建jni文件夾
③在jni文件夾下創建.c文件
④ 導入<jni.h>
#include<stdlib.h>
#include<stdio.h>
#include<jni.h>
//JNIEnv* env是JNINativeInterface的二級指針
//JNIEnv是JNINativeInterface的一級指針
//JNINativeInterface結構體中定義了大量的函數指針,這些函數指針在jni開發中很常用
//(*env)->調用結構體中的函數指針
//jobject 調用本地函數的java對象,在這個例子中就是MainActivity的實例
//C本地函數命名規則Java_包名_類名_本地方法名
//jstring (*NewStringUTF)(JNIEnv*, const char*)
jstring Java_com_wuyudong_jnihello_MainActivity_helloFromC(JNIEnv* env, jobject thiz) {
char* str = "hello from c!";
return (*env)->NewStringUTF(env, str);
}
⑤ 創建Android.mk makefile 告訴編譯器.c的源文件在什麼地方,要生成的編譯對象的名字是什麼
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := hello #指定了生成的動態鏈接庫的名字
LOCAL_SRC_FILES := hello.c #指定了C的源文件叫什麼名字
include $(BUILD_SHARED_LIBRARY)
⑥ 調用ndk-build編譯c代碼生成動態鏈接庫.so文件 文件的位置 lib->armeabi->.so
項目的路徑:F:\workspace_sdk4\01_JNIHelloworld
打開cmd
輸入:cd /d F:\workspace_sdk4\01_JNIHelloworld
輸入:ndk-build

編譯速度很快,生成的文件在libs目錄下,刷新項目就可以看到
⑦ 在java代碼中加載動態鏈接庫 System.loadlibrary("動態鏈接庫的名字"); Android.mkLOCAL_MODULE所指定的名字
MainActivity.java
package com.wuyudong.jnihello;
import android.os.Bundle;
import android.app.Activity;
import android.view.View;
import android.widget.Toast;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void click(View view) {
System.loadLibrary("hello");
String result = helloFromC();
Toast.makeText(getApplicationContext(), result, 0).show();
}
// 聲明本地方法 使用native關鍵字 本地方法不用實現
public native String helloFromC();
}
最後部署項目到模擬器

Android安全之旅系列博客導讀
Android安全之旅系列博客導讀 總結下近一年的學習經歷,以中國的新年為節點。時間從2015年年後到今天,2015年年末。 首先我必須要感謝前輩的書籍和高質量的博客。
Android事件分發機制實例驗證
Android事件分發機制實例驗證 我的程序是在MainActivity中有一個自定義的MyLayout布局,MyLayout布局下面有一個自定義的MyB
Android之AlertDialog應用,androidalertdialog
Android之AlertDialog應用,androidalertdialogAndroid 中的對話框 dialog 對話框對於應用是必不可少的一個組件,在Andro
界面優化處理技術之(二)編輯文本框組件優化處理,文本框組件
界面優化處理技術之(二)編輯文本框組件優化處理,文本框組件開發步驟: 在res下drawable下創建xml文件 添加標簽設置顯示效果 1 <?xml ver