免费99精品国产自在现线观看_人妻少妇精品视频区性色_丝袜 屁股 在线 国产_无码视频在线免费观看

Android Studio JNI 開(kāi)發(fā)簡(jiǎn)單案例(android studio開(kāi)發(fā)java)

進(jìn)程?;?,熱修復(fù),硬件接入等等都需要底層的支持,而底層代碼是 C 、C 寫的,那么在 Android 中怎么調(diào)用底層的庫(kù)呢?這里就需要了解 JNI 技術(shù)。

Android Studio 出來(lái)兩年多了,網(wǎng)上針對(duì) AS 開(kāi)發(fā) JNI 工程資源比較少,針對(duì)于此,我特意寫下本篇博客,希望能對(duì)大家有所幫助。

配置環(huán)境

下載NDK 請(qǐng)點(diǎn)擊這里 ,并進(jìn)行環(huán)境配置,如圖:

Android Studio JNI 開(kāi)發(fā)簡(jiǎn)單案例(android studio開(kāi)發(fā)java)

項(xiàng)目關(guān)聯(lián)NDK ,具體操作如圖:

右鍵你的工程項(xiàng)目,選擇 【Open Module Settings】

Android Studio JNI 開(kāi)發(fā)簡(jiǎn)單案例(android studio開(kāi)發(fā)java)

在 【Android NDK location】配置 NDK 的按著目錄:

Android Studio JNI 開(kāi)發(fā)簡(jiǎn)單案例(android studio開(kāi)發(fā)java)

最后在 項(xiàng)目根目錄 【gradle.properties】 下加上:

1 android.useDeprecatedNdk=true

如圖:

Android Studio JNI 開(kāi)發(fā)簡(jiǎn)單案例(android studio開(kāi)發(fā)java)

JNI實(shí)現(xiàn)

新建 JNI_DEMO 項(xiàng)目,完成以上的配置工作。我的項(xiàng)目路徑為:D:Android_Study_DemosJNI_DEMO

生成 .h 文件

新建TestJNI類

12345 public class TestJNI { public native String HelloWord(String str);}

Android Studio JNI 開(kāi)發(fā)簡(jiǎn)單案例(android studio開(kāi)發(fā)java)

在cmd命令下面,cd到j(luò)ava目錄,輸入javah -jni com.github.jni_demo.TestJNI命令,生成 .h 文件:

Android Studio JNI 開(kāi)發(fā)簡(jiǎn)單案例(android studio開(kāi)發(fā)java)

注意:com.github.jni_demo.TestJNI 不能 cd com , cd github……否則編譯不成功。

你會(huì)發(fā)現(xiàn)在你的java路勁下生成了com_github_jni_demo_TestJNI.h文件:

123456789101112131415161718192021 /* DO NOT EDIT THIS FILE - it is machine generated */#include <jni.h>/* Header for class com_github_jni_demo_TestJNI */#ifndef _Included_com_github_jni_demo_TestJNI#define _Included_com_github_jni_demo_TestJNI#ifdef __cplusplusextern "C" {#endif/* * Class: com_github_jni_demo_TestJNI * Method: HelloWord * Signature: (Ljava/lang/String;)Ljava/lang/String; */JNIEXPORT jstring JNICALL Java_com_github_jni_1demo_TestJNI_HelloWord (JNIEnv *, jobject, jstring);#ifdef __cplusplus}#endif#endif

然后右鍵 app >New> Folder > JNI Folder 生成jni目錄如圖:

Android Studio JNI 開(kāi)發(fā)簡(jiǎn)單案例(android studio開(kāi)發(fā)java)

然后拷貝com_github_jni_demo_TestJNI.h到j(luò)ni目錄下面:

Android Studio JNI 開(kāi)發(fā)簡(jiǎn)單案例(android studio開(kāi)發(fā)java)

生成 .C 文件

右鍵jni,生成com_github_jni_demo_TestJNI.cpp文件:

Android Studio JNI 開(kāi)發(fā)簡(jiǎn)單案例(android studio開(kāi)發(fā)java)

拷貝以下代碼到 .cpp 文件中:

1234567 #include <stdio.h>#include <stdlib.h>#include "com_github_jni_demo_TestJNI.h"JNIEXPORT jstring JNICALL Java_com_github_jni_1demo_TestJNI_HelloWord (JNIEnv *env, jobject, jstring str) { return str;}

build.gradle 配置 ndk

在defaultConfig節(jié)點(diǎn)下加入如下代碼:

1234 ndk { moduleName "TestJNI" abiFilters "armeabi", "armeabi-v7a", "x86" }

點(diǎn)擊 Build > Make Project 如圖:

Android Studio JNI 開(kāi)發(fā)簡(jiǎn)單案例(android studio開(kāi)發(fā)java)

編譯成功后,打開(kāi) build > intermediates > ndk > debug > lib 下查看生成的 .so 文件:

Android Studio JNI 開(kāi)發(fā)簡(jiǎn)單案例(android studio開(kāi)發(fā)java)

Java中調(diào)用JNI

記得把生成的 .so 文件拷貝到項(xiàng)目的 libs 目錄下:

Android Studio JNI 開(kāi)發(fā)簡(jiǎn)單案例(android studio開(kāi)發(fā)java)

接著在Java中調(diào)用JNI:

123456789101112131415161718 package com.github.jni_demo;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.util.Log;public class MainActivity extends AppCompatActivity { static { // 加載動(dòng)態(tài)庫(kù) System.loadLibrary("TestJNI"); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TestJNI testJNI=new TestJNI(); Log.e("---------------","************" testJNI.HelloWord("恭喜你,調(diào)用成功!")); }}

Android Studio JNI 開(kāi)發(fā)簡(jiǎn)單案例(android studio開(kāi)發(fā)java)

這樣你就生成了一個(gè)屬于自己的 .so 文件。

..

相關(guān)新聞

聯(lián)系我們
聯(lián)系我們
在線咨詢
分享本頁(yè)
返回頂部