<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


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


    網站導航:
     
    主站蜘蛛池模板: 国产AV无码专区亚洲AV蜜芽| 亚洲人成77777在线播放网站| 亚洲一区二区三区无码中文字幕| 老司机午夜性生免费福利| 欧洲美熟女乱又伦免费视频| 亚洲色大18成人网站WWW在线播放 亚洲色大成WWW亚洲女子 | 国产精品亚洲二区在线观看| 国产精品亚洲二区在线| 亚洲 自拍 另类小说综合图区 | 免费看大美女大黄大色| 亚洲GV天堂无码男同在线观看 | 成人免费视频国产| 国产天堂亚洲精品| 亚洲日韩在线观看免费视频| 青青久久精品国产免费看| 亚洲精品成人在线| 在线涩涩免费观看国产精品| 亚洲狠狠综合久久| 免费国产成人高清在线观看网站| 亚洲中文字幕无码久久| 国产一级淫片视频免费看| 日韩免费视频播放| 特级aa**毛片免费观看| 亚洲中文字幕在线乱码| 3344免费播放观看视频 | 香港经典a毛片免费观看看| 亚洲欧洲中文日韩av乱码| 日本免费在线观看| 亚洲国产日韩综合久久精品| 免费永久国产在线视频| 日韩精品无码免费专区午夜不卡| 亚洲国产精品白丝在线观看| 在线日韩av永久免费观看| 国产真人无码作爱视频免费| 亚洲中文字幕一二三四区苍井空| 亚洲Av无码国产情品久久| 99精品一区二区免费视频| 亚洲精品无码永久在线观看男男 | 亚洲AV无码一区二区乱子伦| 亚洲AV永久无码天堂影院| 国产成人亚洲综合无码|