Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android NDk環境配置

Android NDk環境配置

編輯:關於Android編程

概論

NDK全稱是Native Development Kit,NDK提供了一系列的工具,幫助開發者快速開發C(或C++)的動態庫,並能自動將so和java應用一起打包成apk。NDK集成了交叉編譯器(交叉編譯器需要UNIX或LINUX系統環境),並提供了相應的mk文件隔離CPU、平台、ABI等差異,開發人員只需要簡單修改mk文件(指出“哪些文件需要編譯”、“編譯特性要求”等),就可以創建出so。

JNI的全稱是Java Native Interface,它提供了若干的API實現了Java和其他語言的通信(主要是C和C++)。

聯系和區別:

為什麼使用NDK?

1、代碼的保護。由於apk的java層代碼很容易被反編譯,而C/C++庫反匯難度較大。

2、可以方便地使用現存的開源庫。大部分現存的開源庫都是用C/C++代碼編寫的。

3、提高程序的執行效率。將要求高性能的應用邏輯使用C開發,從而提高應用程序的執行效率。

4、便於移植。用C/C++寫得庫可以方便在其他的嵌入式平台上再次使用。

為什麼使用JNI?

JNI的目的是使java方法能夠調用c實現的一些函數。

所以從這裡可以看出,是先有NDK開發,然後才有了JNI的調用。

環境

  • 主機:WIN10
  • 開發環境:Android Studio2.2.2 首先要電腦安裝了NDK環境,如果沒有可以在studio安裝 \

    配置環境變量

    • 增加一項:NDK_ROOT,如:D:\android\sdk\ndk-bundle(這裡是sdk的路徑)
    • 在path中增加%NDK_ROOT% \ 新建hello-jni.c  
      /*
       * 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.
       *
       */
      #include 
      #include 
      
      /* This is a trivial JNI example where we use a native method
       * to return a new VM String. See the corresponding Java source
       * file located at:
       *
       *   apps/samples/hello-jni/project/src/com/example/hellojni/HelloJni.java
       */
      //jstring
      //Java_com_bazhangkeji_MainActivity_stringFromJNI( JNIEnv* env,
      //                                                  jobject thiz )
      //{
      //    return (*env)->NewStringUTF(env, "Hello from JNI !");
      //}
      
      JNIEXPORT jstring JNICALL
      Java_com_xzh_ndkdemo_MainActivity_stringFromJNI(JNIEnv *env, jobject instance) {
      
      //    return (*env)->NewStringUTF(env, returnValue);
          return (*env)->NewStringUTF(env, "Hello from 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 := hello_jni LOCAL_SRC_FILES := hello_jni.c include $(BUILD_SHARED_LIBRARY)

      注意,這裡的.c的寫法必須遵循如下規則:函數需按照規則命名:Java_包名類名方法名
      LOCAL_MODULE    := hello_jni
      LOCAL_SRC_FILES := hello_jni.c
      必須和.c文件對應,然後我們在build.gradle中加入如下語句:
      externalNativeBuild {
              ndkBuild {
                  path file("src\\main\\jni\\Hello.mk")
              }
          }
      然後rebuild 。 測試Activity
      public class MainActivity extends AppCompatActivity {
      
          @Override
          protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_main);
              init();
          }
      
          private void init() {
              System.out.println("hello ndkdemo"+stringFromJNI());
          }
          public native String stringFromJNI();
          static {
              System.loadLibrary("hello_jni");
          }
      }

      \

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved