android studio ndk配置和ndk開發

來源:互聯網
上載者:User

標籤:

配置開發環境:

  1:下載ndk,匯入android studio中。

  

 2:在項目中引入NDK

  

  3:在電腦path變數中匯入NDK路徑,在編譯.h檔案的時候會用到。

  

 

一:建立java的native方法,然後編譯產生.class檔案.

 

二:根據.class檔案產生.h檔案。

  1:開啟Terminal,然後進入APP目錄下的main主目錄。

  2:輸入命令。

  

  3:產生.h檔案,產生的jni檔案夾在main檔案夾下。

  

 三:根據.h檔案編寫.c檔案。

 #include <string.h>

#include <jni.h>

jstring Java_com_xingdongmei_media_FirstJni_getFromName(JNIEnv *env, jobject ob){

return (*env)->NewStringUTF(env, "Hello from JNI !");
}

void Java_com_xingdongmei_media_FirstJni_setAge(JNIEnv *env, jobject ob, jfloat age){
// printf("asdf!");
}

調用getFromName方法,返回"hello from JNI !"

四:在jni檔案夾下建立application.mk檔案和Android.mk檔案,如下

  Application.mk檔案

  APP_STL := gnustl_static
  APP_CPPFLAGS := -frtti -fexceptions
  APP_ABI := x86 armeabi armeabi-v7a
  APP_PLATFORM := android-8

  Android.mk檔案

  LOCAL_PATH := $(call my-dir)
  include $(CLEAR_VARS)
  LOCAL_MODULE := firstJni
  LOCAL_SRC_FILES := FirstJni.c
  include $(BUILD_SHARED_LIBRARY)
  具體欄位的作用:   -- LOCAL_PATH : 代表mk檔案所在的目錄;   -- include $(CLEAR_VARS) : 編譯工具函數, 通過該函數可以進行一些初始化操作;   -- LOCAL_MODULE : 編譯後的 .so 尾碼檔案叫什麼名字;   -- LOCAL_SRC_FILES: 指定編譯的源檔案名稱;   -- include $(BUILD_SHARED_LIBRARY) : 告訴編譯器需要產生動態庫;

  五:進入jni檔案夾,在terminal命令視窗輸入ndk-build,然後就能在main檔案夾下產生libs檔案夾和obj檔案夾。

  

 六:在build.gradle中配置.so檔案的路徑。我的為:

  sourceSets.main {
   jniLibs.srcDir ‘src/main/libs‘
  }

七:運行結果:
  

  


八:常見錯誤

1:如果只有c/cpp檔案,直接這樣編譯的話,會報錯,這應該是android studio 在這種情況自動產生Android.mk 時的一個bug,見編譯錯誤。

Error:Execution failed for task ‘:app:compileDebugNdk‘.
> com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process ‘command ‘G:\android-ndk\android-ndk-r10\ndk-build.cmd‘‘ finished with non-zero exit value 2

解決方案:

   在jni檔案下建一個空的empty.c檔案 編譯運行即可。

2:找不到.so檔案。

10-08 03:03:12.100 11948-11948/? E/dalvikvm﹕ dlopen("native/libfirstJni.so") failed: dlopen failed: library "native/libfirstJni.so" not found
10-08 03:03:12.110 11948-11948/? E/CrashHandlerUtils﹕ java.lang.UnsatisfiedLinkError: dlopen failed: library "native/libfirstJni.so" not found

解決方案:

   在項目的APP目錄下的build.gradle裡面加上.so上級目錄檔案的路徑。

   我的.so檔案上級目錄結構

  

我的build.gradle配置的.so檔案路徑:

sourceSets.main {

    jniLibs.srcDir ‘src/main/libs‘
}

android studio ndk配置和ndk開發

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.