<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    我的家園

    我的家園

    android之搭建JNI開發環境及簡單案例

    Posted on 2012-07-02 00:03 zljpp 閱讀(1264) 評論(0)  編輯  收藏

    項目名:HelloFromC

    一、在開始jni編程之前對我們使用的環境進行如下配置:(在windows環境下)

    1、下載android-ndk-r7b,解壓放在C:\android-ndk-r7b目錄下。(方便輸入命令,也可以自定目錄)

    2、下載cygwin。

       安裝的時候,最高版本進行安裝。

    3、配置NDK的 cygwin環境變量 

    為了方便直接在命令行里面使用ndk-build

    需要給cygwin的環境變量里面添加ndk的目錄

    目錄/etc/profile/


    4、運行cygwin。(可輸入如下命令:make -v ,gcc -v)

    輸入make -v 

    顯示出來 GNU Make 的版本 ,說明我們的cygwin模擬的linux編譯環境 模擬成功了.


    二、為eclipse增加cc++的開發插件 CDT插件

    Help中的install new software

    選擇 Helios- http//download.eclipse.org/release/helios

    等待展開,選擇Programing language

    選擇c/c++ 開發工具

    一路next下去。 

    同意licenses

    安裝成功會提示是不是確認重啟eclipse,重啟就完成安裝。


    三、JNI簡單案例:

    Java代碼調用一個C方法打印HelloFromC


    MainActivity:

    package com.csdn.hello;

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

    public class MainActivity extends Activity {
        
        static{
            System.loadLibrary("Hello");//加載
        }
        
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
        }
        
        public native String helloFromC();
        public native String hello_from_c();
        
        
        public void onClick(View view){
            String result= helloFromC();
            Toast.makeText(this,result , 0).show();
        }
        

    }


    main.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical" >

        <Button
            android:onClick="onClick"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="HelloFromC" />

        
    </LinearLayout>

    cmd 進入eclipse中安卓工程HelloFromC的目錄:

    D:\WorkSpace\HelloFromC\bin\classes

    輸入: javah com.csdn.hello,MainActivity

    生成該文件對應的頭文件:com_csdn_hello_MainActivity.h

    在HelloFromC根目錄下建立名為jni的文件夾;

    將其復制到該目錄下;

    com_csdn_hello_MainActivity.h:

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

    #ifndef _Included_com_itheima_hello2_MainActivity
    #define _Included_com_itheima_hello2_MainActivity
    #ifdef __cplusplus
    extern "C" {
    #endif
    /*
     * Class:     com_itheima_hello2_MainActivity
     * Method:    helloFromC
     * Signature: ()Ljava/lang/String;
     */
    JNIEXPORT jstring JNICALL Java_com_csdn_hello_MainActivity_helloFromC
      (JNIEnv *, jobject);

    #ifdef __cplusplus
    }
    #endif
    #endif


    jni目錄下加入Android.mk文件:

       #local_path 代表的是當前android.mk文件所在的路徑
       #$() 代表的是一個函數.
       LOCAL_PATH := $(call my-dir)

      #CLEAR_VARS 清空變量 
      # 清空所有以LOCAL_ 開頭的變量里面的內容 (不會清空LOCAL_PATH里面的數據);
       include $(CLEAR_VARS)

     # 定義編譯后的 c代碼庫 的名稱.
       LOCAL_MODULE    := Hello
      #定義makefile 編譯的源文件
      #依賴的頭文件 是不需要指定的.
       LOCAL_SRC_FILES := Hello.c

       #生成一個動態的代碼庫
       include $(BUILD_SHARED_LIBRARY)
       # include $(BUILD_STATIC_LIBRARY); 生成一個靜態的代碼庫
       # 靜態代碼庫的作用 主要就是用來提供一些庫函數 編譯的時候 可能需要用到靜態代碼庫.
       


    并編寫Hello.c文件:

    #include "com_csdn_hello_MainActivity.h"

    JNIEXPORT jstring JNICALL Java_com_csdn_hello_MainActivity_helloFromC
      (JNIEnv * env, jobject obj){
       return (*env)->NewStringUTF(env,"Hello From C");
     }

    打開cygwin

    輸入 cd..

    cd ..

    切換到linux根目錄下

    然后進入到應用程序目錄

    cd cydrive/d/WorkSpace/HelloFromc

    ndk-build 進行編譯,生成動態庫:

    在D:\WorkSpace\HelloFromC2\obj\local\armeabi下會自動生成

    libHello.so文件


    最后在如上的MainActivity中的static代碼塊中加載動態庫,即Android.mk中LOCAL_MODULE    := Hello 變量的值

    然后部署應用程序,點擊按鈕即可利用土司打印出結果 HelloFromC


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 日本免费v片一二三区| 免费可以在线看A∨网站| 亚洲性在线看高清h片| 人妖系列免费网站观看| 四虎免费久久影院| 人妻无码中文字幕免费视频蜜桃| 狠狠久久永久免费观看| 亚洲av色香蕉一区二区三区蜜桃| 日韩成人免费在线| 免费无码一区二区| 美腿丝袜亚洲综合| 成人精品一区二区三区不卡免费看| 亚洲av无码成人精品区一本二本 | 亚洲AV无码乱码在线观看性色扶 | 无码人妻一区二区三区免费| 亚洲国产综合在线| 韩国18福利视频免费观看| 黄色三级三级免费看| 亚洲国产婷婷综合在线精品| 亚洲午夜国产精品无卡| 成年女人毛片免费播放人| 亚洲AV第一成肉网| 在线亚洲人成电影网站色www| 成人自慰女黄网站免费大全| 亚洲av鲁丝一区二区三区| 成视频年人黄网站免费视频| 亚洲成a人片在线观看天堂无码 | 在线aⅴ亚洲中文字幕| 四虎永久免费网站免费观看| 99久久成人国产精品免费| 亚洲欧洲综合在线| 国产无遮挡吃胸膜奶免费看视频| 久久www免费人成精品香蕉| 亚洲精品国产专区91在线| 色www永久免费视频| 国产无遮挡又黄又爽免费网站| 亚洲精品乱码久久久久久下载| 国产在线播放免费| 一级毛片免费不卡在线| 免费人成视频在线播放| 亚洲网站在线播放|