AndroidStudio環境下ndk開發

來源:互聯網
上載者:User

標籤:

AndroidStudio環境下ndk開發的基本步驟是,寫本地方法產生標頭檔,用c/c++實現本地方法,配置android.mk檔案產生so檔案。具體步驟如下

1.建立android工程:MyJni。

2.寫本地方法,並編譯成class檔案,在\app\build\intermediates\classes\debug中找。

public class MainActivity extends AppCompatActivity {    static {        System.loadLibrary("JniTest");    }    public native String getStringFromNative();        @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        TextView txtView = (TextView) findViewById(R.id.txt);        txtView.setText(getStringFromNative());    }}

     3.用命令列編譯成標頭檔:

javah -d jni -classpath D:\devolp\SDK\SDK\platforms\android-23\android.jar;D:\devolp\SDK\SDK\extras\android\support\v4\android-support-v4.jar;D:\devolp\SDK\SDK\extras\android\sup
port\v7\appcompat\libs\android-support-v7-appcompat.jar;E:\AndroidDev\Utils\MyJni\app\build\intermediates\classes\debug com.vko.myjni.MainActivity

 

在編譯標頭檔時,可以選擇javah -d app/src/jni 這樣就可以省略第7步了

4.在jni檔案夾中建c/c++檔案,並寫入代碼

#include <jni.h>/* Header for class com_vko_myjni_MainActivity */#ifndef _Included_com_vko_myjni_MainActivity#define _Included_com_vko_myjni_MainActivity#ifdef __cplusplus //以標準C形式輸出extern "C" {#endifJNIEXPORT jstring JNICALL Java_com_vko_myjni_MainActivity_getStringFromNative  (JNIEnv * env, jobject){  return (*env)->NewStringUTF(env,"Hello From JNI!");  }#ifdef __cplusplus}#endif

5.在jni檔案夾中建立並配置android.mk檔案

  

mk檔案具體的可以參考android-ndk-r9\docs下的文檔

#必須以LOCAL_PATH變數開頭LOCAL_PATH := $(call my-dir)#清除變數include $(CLEAR_VARS)LOCAL_MODULE    := JniTestLOCAL_SRC_FILES :=  main.cLOCAL_DEFAULT_CPP_EXTENSION := cpp#include $(BUILD_EXECUTABLE)#編譯產生動態共用程式庫include $(BUILD_SHARED_LIBRARY)

6.編譯c/c++檔案成為so檔案。用命令列:ndk-build

可以看到

7.在app目錄中build.gradle檔案中加入

sourceSets {    main {        jniLibs.srcDirs = [‘libs‘]    }}

    組成如下:

    

apply plugin: ‘com.android.application‘android {    compileSdkVersion 23    buildToolsVersion "23.0.1"    defaultConfig {        applicationId "com.vko.myjni"        minSdkVersion 10        targetSdkVersion 23        versionCode 1        versionName "1.0"    }    buildTypes {        release {            minifyEnabled false            proguardFiles getDefaultProguardFile(‘proguard-android.txt‘), ‘proguard-rules.pro‘        }    }    sourceSets {        main {            jniLibs.srcDirs = [‘libs‘]        }    }}dependencies {    compile fileTree(dir: ‘libs‘, include: [‘*.jar‘])    compile ‘com.android.support:appcompat-v7:23.0.1‘}

7.將libs中的檔案包括檔案夾全部拷入到app目錄中的libs檔案夾中

   

刪掉項目目錄下libs、jni、obj目錄不影響程式運行

8.運行android程式

  

 

 

 

AndroidStudio環境下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.