可以在线看黄的网站-可以免费在线看黄的网站-可以免费看污视频的网站-可以免费看毛片的网站-欧美电影免费看大全-欧美电影免费

Android Studio JNI 開發簡單案例(android studio開發java)

進程?;?,熱修復,硬件接入等等都需要底層的支持,而底層代碼是 C 、C 寫的,那么在 Android 中怎么調用底層的庫呢?這里就需要了解 JNI 技術。

Android Studio 出來兩年多了,網上針對 AS 開發 JNI 工程資源比較少,針對于此,我特意寫下本篇博客,希望能對大家有所幫助。

配置環境

下載NDK 請點擊這里 ,并進行環境配置,如圖:

Android Studio JNI 開發簡單案例(android studio開發java)

項目關聯NDK ,具體操作如圖:

右鍵你的工程項目,選擇 【Open Module Settings】

Android Studio JNI 開發簡單案例(android studio開發java)

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

Android Studio JNI 開發簡單案例(android studio開發java)

最后在 項目根目錄 【gradle.properties】 下加上:

1 android.useDeprecatedNdk=true

如圖:

Android Studio JNI 開發簡單案例(android studio開發java)

JNI實現

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

生成 .h 文件

新建TestJNI類

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

Android Studio JNI 開發簡單案例(android studio開發java)

在cmd命令下面,cd到java目錄,輸入javah -jni com.github.jni_demo.TestJNI命令,生成 .h 文件:

Android Studio JNI 開發簡單案例(android studio開發java)

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

你會發現在你的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 開發簡單案例(android studio開發java)

然后拷貝com_github_jni_demo_TestJNI.h到jni目錄下面:

Android Studio JNI 開發簡單案例(android studio開發java)

生成 .C 文件

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

Android Studio JNI 開發簡單案例(android studio開發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節點下加入如下代碼:

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

點擊 Build > Make Project 如圖:

Android Studio JNI 開發簡單案例(android studio開發java)

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

Android Studio JNI 開發簡單案例(android studio開發java)

Java中調用JNI

記得把生成的 .so 文件拷貝到項目的 libs 目錄下:

Android Studio JNI 開發簡單案例(android studio開發java)

接著在Java中調用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 { // 加載動態庫 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("恭喜你,調用成功!")); }}

Android Studio JNI 開發簡單案例(android studio開發java)

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

..

相關新聞

聯系我們
聯系我們
在線咨詢
分享本頁
返回頂部