1. 程式人生 > >android NDK開發demo(基於android )

android NDK開發demo(基於android )

利用android studio進行NDK開發 一.新建android專案

新建Myndkproject工程然後再新建一個class為MyHelloNDK的類,定義native方法。

public class MyHelloNDK { static { System.loadLibrary("myhellotest"); } public native String getString();//本地方法 }

二.配置NDK

  如截圖所示,如果沒有配置的話,請先下載ndk,然後如截圖所示配置。


三.生成so庫檔案

1.make project生成MyHelloNDK對應的.class檔案,然後進入.class檔案目錄

在路徑:app\build\intermediates\classes\debug
2.進入該路徑後,呼叫jni.h命令生成對應的.h檔案

利用android studio的terminal進入到debug路徑下,執行如下命令:

javah -jni my.com.myndkproject.MyHelloNDK //-jni 後為你的類的包名加類名

3.執行完成後會在該路徑下生成對應的.h檔案,生成的程式碼如下

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class my_com_myndkproject_MyHelloNDK */

#ifndef _Included_my_com_myndkproject_MyHelloNDK
#define _Included_my_com_myndkproject_MyHelloNDK
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     my_com_myndkproject_MyHelloNDK
 * Method:    getString
 * Signature: ()Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_my_com_myndkproject_MyHelloNDK_getString
  (JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif

4.在工程的main目錄下新建一個名字為jni的目錄,然後將剛才的 .h檔案剪下過來。在jni目錄下新建一個c檔案,隨意取名,我的叫myhellotest.c 。然後編輯程式碼如下

//
// Created by c_lj on 16-12-30.
//
#include "my_com_myndkproject_MyHelloNDK.h"
/*
 * Class:     my_com_myndkproject_MyHelloNDK
 * Method:    getString
 * Signature: ()Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_my_com_myndkproject_MyHelloNDK_getString
  (JNIEnv * env, jobject obj){
     return (*env)->NewStringUTF(env,"This just a test for Android Studio NDK JNI developer!");
}
5.檢查配置工程的local.properties檔案中新增NDK路徑,有些版本預設未配置
ndk.dir=/home/c_ljf/AndroidSDK/android-sdk-linux/ndk-bundle
sdk.dir=/home/c_ljf/AndroidSDK/android-sdk-linux
6.配置app/build.gradle的檔案
apply plugin: 'com.android.application'

android {
    compileSdkVersion 24
    buildToolsVersion "25.0.0"

    defaultConfig {
        applicationId "my.com.myndkproject"
        minSdkVersion 15
        targetSdkVersion 24
        versionCode 1
        versionName "1.0"
        ndk {
            moduleName "myhellotest"         //生成的so名字
            abiFilters "armeabi", "armeabi-v7a", "x86"  //輸出指定三種abi體系結構下的so庫。
        }
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

}

dependencies {
    compile 'com.android.support:appcompat-v7:24.2.1'
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
}
7.build 工程就可以生成對應的庫了

1.MainActivity.java

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        TextView tv=(TextView)findViewById(R.id.tv);
        MyHelloNDK myHelloNDK=new MyHelloNDK();
        tv.setText(myHelloNDK.getString());

    }
}
2.佈局檔案
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    tools:context="my.com.myndkproject.MainActivity">

    <TextView
        android:text="Hello World!"
        android:id="@+id/tv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

</RelativeLayout>
四.以後總結,馬上下班了。
參考1:http://blog.csdn.net/yanbober/article/details/45309049/

參考2:http://www.open-open.com/lib/view/open1475221220286.html#articleHeader1


相關推薦

android NDK開發demo(基於android )

利用android studio進行NDK開發 一.新建android專案 新建Myndkproject工程,然後再新建一個class為MyHelloNDK的類,定義native方法。 public class MyHelloNDK { static {

Android-NDK開發之基礎--Android JNI有關Java類命名方式

 (Ljava/lang/String;I)V   其中本句  I = IntegerB = ByteS = ShortC = CharLXXX; = L加上類名   3. 在JNI下面,我們常用的命名方式:     static JavaVM *g_VM;   //全

Android逆向基礎筆記—Android NDK開發4之Android studio NDK自動編譯

這部分就是最後的部分了,為什麼要寫Android studio呢。大家知道,eclipse 到了現在,已經不被Google支援了,所以現在最好的開發就是利用Android studio。雖然說,網上有

Android-NDK開發之基礎--Android JNI開發高階篇(JNI中的常用方法)

有關Android JNI開發中比較強大和有用的功能就是從JNI層建立、構造Java的類或執行Java層的方法獲取屬性等操作。    一、類的相關操作    1. jclass FindClass(JNIEnv *env, const char *name);  查詢類   

玩轉Android Camera開發基於Google自帶演算法實時檢測人臉並繪製人臉框 網路首發 附完整demo

                    本文主要介紹使用Google自帶的FaceDetectionListener進行人臉檢測,並將檢測到的人臉用矩形框繪製出來。本文程式碼基於PlayCameraV1.0.0,在Camera的open和preview流程上進行了改動。原先是放在單獨執行緒裡,這次我又把它放到

Android NDK開發之從環境搭建到Demo級十步流

寫在正文之前: 幾個月沒有更新部落格,感覺有點生疏了,所以說不能斷,一斷人就懶。 其實這幾個月也並不是什麼事也沒有做,俺可是時刻想著今年的任務呢,10本書,30篇博文…,這幾個月間斷性的也是在學習中,學H5,學設計模式,以及NDK JNI開發等等。 學習J

Android NDK 開發總結

設置 .text nbsp def runt 編寫 abi 文件的 targe 一.安裝配置環境 1.安裝Android Studio,下載路徑https://developer.android.com/studio/index.html?hl=zh-cn。我下載的是Win

android NDK開發中,用Cygwin調試本地代碼時報錯“Another debug session running,Use --force to kill it”原因及解決的方法

能夠 att cati kill 時報 andro 使用 deb gdb調試 在使用ndk-gdb調試的時候。運行$NDK/ndk-gdb --verbose報錯“Another debug session running,Use --force to kil

Android NDK開發及OpenCV初步學習筆記

-a cep cto strip 鏈接 jni 加載 idt jniexport https://www.jianshu.com/p/c29bb20908da Android NDK開發及OpenCV初步學習筆記 Super_聖代 關註 2017.08.19 00:

Android NDK開發 Android JNI專案建立

本篇文章只介紹android ndk在windows系統的編譯環境配置方法 更新於2015年1月11日 將更加詳細的介紹一個基本的Android Jni專案的建立。 步驟一:下圖是必須的,配置好這一步驟就可以進行Android JNI專案的建立了。 步驟二:新建一個Andr

Android NDK 開發教程三 Hello JNI 示例

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Android NDK開發(一)CMake構建工具使用

  一、Android studio中需要的外掛:     CMake     LLDB     NDK   二、專案配置      ①build.gardle的配置  :多了兩個externalNativeBuild :def

ubuntu14.04搭建Android-NDK開發環境

1.建立Android平臺工作空間 mkdir AndroidWorkSpace 2.進入Android平臺工作空間,建立NDK工具目錄 cd AndroidWorkSpace mkdir NDK_Tools 3.獲取android-ndk-r10b 下載:wget ht

Android NDK開發之引入第三方庫

在Android開發中我們經常要把一些比較看重安全或者計算效率的東西通過JNI呼叫C/C++程式碼來實現,如果需要實現的功能簡單或者你的C/C++程式碼能力比較強,但是目前還是有很多功能強大的第三方庫的,比如openssl、FFmpeg等,呼叫這些第三方實現顯然比重複造輪子實際的多。 本教程適合將原始的動態

Android NDK開發掃盲及最新CMake的編譯使用

本篇文章旨在簡介 Android 中 NDK 是什麼以及重點講解最新 Android Studio 編譯工具 CMake 的使用 1 NDK 簡介 在介紹 NDK 之前還是首推 Android 官方 NDK 文件。傳送門 官方文件分別從以下幾個方面介紹了 NDK ND

android ndk開發crash崩潰定位:

android使用ndk開發crash崩潰定位: 1、法一:使用ndk-stack輸出呼叫堆疊    cd /home/hk/Android-Develop/android-ndk-r12b 將log.txt放在這個目錄    ./ndk-stack -sym

android NDK 開發(2)

java向native層傳遞引數 1.傳遞基本型別引數,可以直接使用 //Java層定義介面 public native static int sum(int a, int b); //.c檔案native層實現 JNIEXPORT jint JNICALL Java_c

android NDK 開發(3)

1.native層呼叫java層static方法 //java層定義方法 public native static void request(); //native層執行完request後回撥此方法 public static void nativeCallBack()

Android NDK開發之旅(6):JNI函式完全解析與專案實戰

對於基本型別而言,JNI與Java之間的對映是一對一的,比如Java中的int型別直接對應於C/C++中的jint;而對引用型別的處理卻是不同的,JNI把Java中的物件當作一個C指標傳遞到本地函式中,這個指標指向JVM中的內部資料結構,而內部資料結構在記憶體

Android NDK開發之CMake

知之為知之,不知為不知 哇!(先來個王者之哇助助興),最近的專案一直用到Android NDK,簡直頭皮發麻,每次底層出現問題,都要找同事幫忙,甚是尷尬,於是看一些帖子,稍微整理了一下,做個小筆記,同時也分享一下前人之經驗.不說了,開始進入正題. Android開發環境 工具:And