TShopping

 找回密碼
 註冊
搜索
查看: 208|回復: 1

[教學] 在Android運行NDK 的Sample

[複製鏈接]
發表於 2014-10-21 23:53:43 | 顯示全部樓層 |閱讀模式
 
Push to Facebook Push to Plurk Push to Twitter 
在Android運行NDK

(在此不解釋如何安裝NDK)

運行平台:Archlinux 64

1.建立Android  專案檔

$android create project -p ./ -t 3 -k net.aminzai.myjni -a MyJniActivity

2.編輯MyJniActivity

package net.aminzai.myjni;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;


public class MyJniActivity extends Activity
{
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        TextView tv = new TextView(this);
        tv.setText(getString());
        setContentView(tv);
    }
   
    public native String getString();


    static{
        System.loadLibrary("net_aminzai_myjni_MyJniActivity");
    }
}



3.編譯java file

$ant compile

4.產生所需要的c  header

$cd bin/classes

$javah -jni net.aminzai.myjni.MyJniActivity

$cd (Project-Root)

5.建立Android的jni 資料夾

$mkdir jni

6.將header file 移至 jni資料夾底下

$mv bin/classes/net_aminzai_myjni_MyJniActivity.h jni

會看到裏面的內容是

$cat ./jni/net_aminzai_myjni_MyJniActivity.h
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class net_aminzai_myjni_MyJniActivity */


#ifndef _Included_net_aminzai_myjni_MyJniActivity
#define _Included_net_aminzai_myjni_MyJniActivity
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class:     net_aminzai_myjni_MyJniActivity
* Method:    getString
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_net_aminzai_myjni_MyJniActivity_getString
  (JNIEnv *, jobject);


#ifdef __cplusplus
}
#endif
#endif

7.建立 c file

$vi jni/net_aminzai_myjni_MyJniActivity.c

#include"net_aminzai_myjni_MyJniActivity.h"
/*
* Class:     net_aminzai_myjni_MyJniActivity
* Method:    getString
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_net_aminzai_myjni_MyJniActivity_getString
  (JNIEnv * env, jobject x){
      return (*env)->NewStringUTF(env, "Complex string calculated in native code");
  }

8.產生編譯用的makefile

$vi (Project_Root)/Application.mk

APP_PROJECT_PATH:=$(call my-dir)
APP_MODULE        :=  net_aminzai_myjni_MyJniActivity

$vi (Project_Root)/jni/Android.mk

LOCAL_PATH := $(call my-dir)


include $(CLEAR_VARS)


LOCAL_MODULE    := net_aminzai_myjni_MyJniActivity
LOCAL_SRC_FILES := net_aminzai_myjni_MyJniActivity.c


include $(BUILD_SHARED_LIBRARY)

9.編譯 c file

$ndk-build                                
Compile thumb  : net_aminzai_myjni_MyJniActivity <= net_aminzai_myjni_MyJniActivity.c
SharedLibrary  : libnet_aminzai_myjni_MyJniActivity.so
Install        : libnet_aminzai_myjni_MyJniActivity.so => libs/armeabi/libnet_aminzai_myjni_MyJniActivity.so

10.編譯&安裝apk

$ant install

11.運行

 

臉書網友討論
發表於 2014-11-6 13:03:46 | 顯示全部樓層

    真的这么神奇?

版主招募中

您需要登錄後才可以回帖 登錄 | 註冊 |

本版積分規則



Archiver|手機版|小黑屋|免責聲明|TShopping

GMT+8, 2016-12-6 04:30 , Processed in 0.059306 second(s), 22 queries .

本論壇言論純屬發表者個人意見,與 TShopping綜合論壇 立場無關 如有意見侵犯了您的權益 請寫信聯絡我們。

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表