<li id="34b3z"></li>
    <nav id="34b3z"></nav>
  1. <wbr id="34b3z"><legend id="34b3z"></legend></wbr>
    
    

        1. <form id="34b3z"></form>
          <sub id="34b3z"><table id="34b3z"><th id="34b3z"></th></table></sub>

          ?

          android之JNI開發步驟總結

          作者:達內 更新時間:2014-06-13 17:26 來源:未知 點擊:
          這幾天一直在研究JNI的開發過程,順便把NDK環境搭建一起總結下。在windows環境下開發jni需要c/c++編譯器的支持,網絡上我看很多人使用cygwin。呵呵我不是很喜歡使用它,感覺安裝起來挺

            這幾天一直在研究JNI的開發過程,順便把NDK環境搭建一起總結下。在windows環境下開發jni需要c/c++編譯器的支持,網絡上我看很多人使用cygwin。呵呵我不是很喜歡使用它,感覺安裝起來挺麻煩的。我使用GNUStep,下載地址http://www.gnustep.org/experience/Windows.html。

            下載安裝后,驗證是否成功。打開GNUstep->Shell,輸入make -v 和 gcc -v命令,如圖所示。

            下載NDK,地址http://developer.android.com/tools/sdk/ndk/index.html。下載完后解壓即可。

            配置ndk環境變量,gnustep是模擬linux的環境的,打開gnustep的安裝目錄下的G:\softinstall\GNUstep\GNUstep\GNUstep.conf文件,添加以下內容:

            復制內容到剪貼板

            代碼:

            NDK=/g/softinstall/Android/android-ndk-r8b

            export=NDK

            說明如果不知道ndk目錄在linux下應該是在哪里,你可以打開gnustep的命令窗口,輸入mount,就可以找到對應的盤符。

            驗證環境變量,如下圖。

            以上就配置成功了。

            下載進入正題啦。Jni的開發步驟。

            打開eclipse,新建工程名為testJni。在activity中添加以下代碼

            復制內容到剪貼板

            代碼:

            package com.xzw.jni;

            import android.os.Bundle;

            import android.app.Activity;

            import android.view.Menu;

            import android.view.MenuItem;

            import android.widget.TextView;

            import android.support.v4.app.NavUtils;

            /**

            *

            * @author XuZhiwei (xuzhiwei@gmail.com)

            * sina:http://weibo.com/xzw1989

            *

            * Create at 2012-8-30 上午10:49:45

            */

            public class TestJni extends Activity {

            @Override

            public void onCreate(Bundle savedInstanceState) {

            super.onCreate(savedInstanceState);

            }

            //natvie必須聲明,用于生成C/C++代碼

            public native String hello();

            static{

            System.loadLibrary("testJni");

            }

            }

            編譯后的文件在bin目錄下,通過javah命令生成c/c++的文件頭。如下圖

            會在項目目錄下生成jni/com_xzw_jni_TestJni.h。

            頭文件代碼如下:

            復制內容到剪貼板

            代碼:

            /* DO NOT EDIT THIS FILE - it is machine generated */

            #include

            /* Header for class com_xzw_jni_TestJni */

            #ifndef _Included_com_xzw_jni_TestJni

            #define _Included_com_xzw_jni_TestJni

            #ifdef __cplusplus

            extern "C" {

            #endif

            /*

            * Class: com_xzw_jni_TestJni

            * Method: hello

            * Signature: ()Ljava/lang/String;

            */

            JNIEXPORT jstring JNICALL Java_com_xzw_jni_TestJni_hello

            (JNIEnv *, jobject);

            #ifdef __cplusplus

            }

            #endif

            #endif

            這里我們可以根據頭文件編寫c代碼

            復制內容到剪貼板

            代碼:

            #include

            #include

            jstring

            Java_com_xzw_jni_TestJni_hello

            (JNIEnv* env, jobject thiz){

            return (*env)->NewStringUTF(env, "哈哈完成自動化編譯 !");

            }

            接下來編寫 Android.mk,該文件可以直接從NDK的samples下的hello-jni的jni文件下直接靠過來改改就可以了。也貼下代碼哈。

            復制內容到剪貼板

            代碼:

            # Copyright (C) 2009 The Android Open Source Project

            #

            # Licensed under the Apache License, Version 2.0 (the "License");

            # you may not use this file except in compliance with the License.

            # You may obtain a copy of the License at

            #

            # http://www.apache.org/licenses/LICENSE-2.0

            #

            # Unless required by applicable law or agreed to in writing, software

            # distributed under the License is distributed on an "AS IS" BASIS,

            # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

            # See the License for the specific language governing permissions and

            # limitations under the License.

            #

            LOCAL_PATH := $(call my-dir)

            include $(CLEAR_VARS)

            LOCAL_MODULE := testJni

            LOCAL_SRC_FILES := testJni.c

            include $(BUILD_SHARED_LIBRARY)

            其中你只需要該LOCAL_MODULE和LOCAL_SRC_FILES就可以了。

            說明:LOCAL_MODULE是描述模塊的,用來給java調用的模塊名,會生成對應的libtestJni.so

            LOCAL_SRC_FILES就是源文件啦,多個文件空格隔開即可。

            接下來,我們要開始編譯生成so文件咯。

            打開gnustep的命令窗口,進入到項目底下,輸入$NDK/ndk-build命令,即可自動生成libs/armeabi/libtestJni.so文件。

            接下來就是java調用了。直接上代碼

            復制內容到剪貼板

            代碼:

            package com.xzw.jni;

            import android.os.Bundle;

            import android.app.Activity;

            import android.view.Menu;

            import android.view.MenuItem;

            import android.widget.TextView;

            import android.support.v4.app.NavUtils;

            /**

            *

            * @author XuZhiwei (xuzhiwei@gmail.com)

            * sina:http://weibo.com/xzw1989

            *

            * Create at 2012-8-30 上午10:49:45

            */

            public class TestJni extends Activity {

            @Override

            public void onCreate(Bundle savedInstanceState) {

            super.onCreate(savedInstanceState);

            TextView tv = new TextView(this);

            tv.setText(hello()); //這里的hello() 就是調用c

            setContentView(tv);

            }

            public native String hello();

            static{

            System.loadLibrary("testJni");

            }

            }

            運行結果如下

            以上就是jni的開發步驟了。

            在這里我還要補充下:

            在我們開發過程中,改一個c/c++的文件,我們都要手動去編譯一下有點兒麻煩。這里我們可以使用讓eclipse幫助我們自己編譯。

            右擊jni工程的properties-->Builders-->NEW -->;Program 可以看到以下內容:

            argument:--login -c "cd /e/myWorkSpace/android/hellJni && $NDK/ndk-build"

            切換到Refresh 標簽頁

            切換到Build Options標簽頁

            這樣就完成了配置,點擊確定可看到控制臺自動編譯程序了

          標簽:

          相關閱讀

          最新開班信息

          3G-Android軟件工程師就業班
          北京潘家園中心 開課日期:9月29日
          3G-Android軟件工程師就業班
          北京潘家園中心 開課日期:9月29日
          3G-Android軟件工程師周末班
          北京潘家園中心 開課日期:9月29日
          3G-Android軟件工程師周末班
          北京潘家園中心 開課日期:9月29日
          一本之道高清在线观看一区_高清在线不卡二区_最新国产高清不卡a 百度 好搜 搜狗
          <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <文本链> <文本链> <文本链> <文本链> <文本链> <文本链>