Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 關於android開發 >> Android jni helloworld,androidjni

Android jni helloworld,androidjni

編輯:關於android開發

Android jni helloworld,androidjni


新建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();
}

最後部署項目到模擬器

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved