<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无码app | 日韩免费毛片视频| 亚洲色www永久网站| 成人奭片免费观看| 亚洲成av人在线观看网站| 影音先锋在线免费观看| 337P日本欧洲亚洲大胆艺术图 | 亚洲av无码有乱码在线观看| 色吊丝最新永久免费观看网站| 亚洲精品第一国产综合亚AV| 成人爱做日本视频免费| 水蜜桃视频在线观看免费| 亚洲一区二区三区乱码A| 国产在线国偷精品免费看| 色拍自拍亚洲综合图区| 成人免费午夜在线观看| 色九月亚洲综合网| 亚洲香蕉成人AV网站在线观看| 国产成人AV片无码免费| 激情五月亚洲色图| 国产成人啪精品视频免费网| 国产A∨免费精品视频| 亚洲成人午夜在线| 成人最新午夜免费视频| 曰韩无码AV片免费播放不卡 | 亚洲精品无码你懂的| 亚洲精品视频在线看| 91福利免费体验区观看区| 亚洲精品自偷自拍无码| 自拍偷自拍亚洲精品第1页| 日本免费一区二区三区| 亚洲老熟女五十路老熟女bbw| 亚洲视频在线一区二区| 4399影视免费观看高清直播| 亚洲色最新高清av网站| 中文字幕亚洲无线码| 在线观看免费人成视频色| 好猛好深好爽好硬免费视频| 77777_亚洲午夜久久多人| 又粗又黄又猛又爽大片免费|