1. 程式人生 > >Android Studio jni 實現

Android Studio jni 實現

JNI總結:遵循以下步驟可以將一個本地方法連結到Java程式中

1.在Java類中宣告一個本地方法

2.執行javah以獲得包含該方法的C宣告的標頭檔案

3.用C實現該本地方法

4.將程式碼置於共享庫中

5.在Java程式中載入該類庫

note:一些原生代碼的共享庫必須先執行初始化程式碼。可以把初始化程式碼放到JNI_OnLoad方法中。類似地,如果提供該方法,當虛擬機器關閉時,將會呼叫JNI_OnUnload方法。

其原型為:

  1. jint JNI_OnLoad(JavaVM* vm, void* reserved);  
  2. void JNI_OnUnload(JavaVM* vm, void* reserved);  
JNI_OnLoad方法要返回所需的虛擬機器的最低版本,例如:

JNI_VERSION_1.2

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

1.配置Anroid Studio(這步是關鍵)

選中專案,單擊File選單,選擇Setting進入設定介面。或者按快捷鍵 Ctrl+Alt+S。


點選+號之後,開啟Macros 配置巨集命令介面,如下圖:


2.配置使用javah 、ndk-build、ndk-build clean這三個命令,請看下圖


-d <dir>表示將產生的標頭檔案放到指定目錄;

-classpath classes 指明類所在的位置

-jni com.hypersilicon.dav.DavJNI 指定類名



3.配置完成,我們開始新建工程MyNdk,然後新建jni目錄

4.修改app下的build.gradle檔案, 如下圖


ndk{    
  moduleName "MyLibrary"
}
sourceSets.main{
    jni.srcDirs = []    
    jniLibs.srcDir "src/main/libs"}

5.修改MyNdk下的gradle.properties檔案(如果沒有此檔案,自己新建一個)

android.useDeprecatedNdk=true

6.新建MyNdk.java

public
class MyNdk { static { System.loadLibrary("MyLibrary"); } public native String getString(); }


7.這步開始建立標頭檔案,操作如下圖(注意在MyNdk.java檔案上點選右鍵)


8.執行完成後jni目錄下就建立了com_zhangyp_higo_myndk_MyNdk.h檔案,然後我們在jni目錄下編寫 MyLibrary.cpp、Android.mk、Application.mk這三個檔案,程式碼如下:


com_zhangyp_higo_myndk_MyNdk.h

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

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

#ifdef __cplusplus
}
#endif
#endif
MyLibrary.cpp
#include "com_zhangyp_higo_myndk_MyNdk.h"

JNIEXPORT jstring JNICALL Java_com_zhangyp_higo_myndk_MyNdk_getString
  (JNIEnv * env, jobject obj){
   return (*env).NewStringUTF("This is mylibrary !!!");
  }
Android.mk
LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := MyLibrary
LOCAL_SRC_FILES =: MyLibrary.cpp
include $(BUILD_SHARED_LIBRARY)

Application.mk

APP_MODULES := MyLibrary
APP_ABI := all

9.執行ndk-build

(注意在jni目錄上點選右鍵,選擇ndk-build)

10.得到so檔案,如下圖


11.在MainActivity中呼叫,程式碼如下

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);

        tv.setText(new MyNdk().getString());

    }
}

12.大功告成,可以運行了,oh yet!


相關推薦

超級簡單的Android Studio jni 實現(無需命令列)

1.配置Anroid Studio(這步是關鍵) 使用[command+,] 開啟Preferences,選擇External Tools,點選加號框如下圖:   Paste_Image.png 點選+號之後,開啟Macros 配置巨集命令介面,如下圖: P

Android Studio jni 實現

JNI總結:遵循以下步驟可以將一個本地方法連結到Java程式中1.在Java類中宣告一個本地方法2.執行javah以獲得包含該方法的C宣告的標頭檔案3.用C實現該本地方法4.將程式碼置於共享庫中5.在Java程式中載入該類庫note:一些原生代碼的共享庫必須先執行初始化程式碼

Android Studio Jni開發(二)實現Native呼叫java方法和Native呼叫Android API

這一篇主要內容是Native呼叫java方法和Native呼叫Android API,以及External Tools快速生成.h檔案,依然是使用NDK方式編譯,如果是複製貼上黨,建議跟本文用一樣的工程名,本文後面會提供demo連結 一、建立工程 1.建立名為Jnites

實現Android Studio JNI開發C/C++使用__android_log_print輸出Log

Android Studio的Android.mk是自動生成的,就算修改也是沒用了,實際Android Studio的Android.mk是根據gradle檔案生成的,那麼就需要修改gradle檔案。如果不修改gradle,直接使用__android_log_print就會報錯Error:(36) undef

第一個Android studio JNI程序

say debug native mil 教程 lib 國內 generate mea 現在網上有很多實用JNI的教程,本文主要用於記錄自己實現的方法和遇到的坑。 第一步,下載NDK. NDK可以去谷歌Android developer上下載。國內也有些中國版

Android Studio JNI 多坑總結

1.什麼是 JNI JNI——(Java Native Interface),他是java平臺的特性,不是安卓系統提供的。他定義了一些JNI函式,來讓開發者可以通過呼叫這些函式來實現java程式碼呼叫C/C++程式碼。 2.如何使用 JNI 我們先將寫好的C/C++程式碼編譯成對應平臺的

Android studio程式碼實現打電話+點選事件四種方式

?Android系統架構(重點) 第一層:應用層Application 第二層:應用框架層Application Framework 第三層:Android底層類庫層 Libraries、Dalvik虛擬機器 第四層:linux核心層 linux kernel Android是執行在

Android Studio JNI (影象變灰過程)使用cmake (1)

Android Studio JNI (影象變灰過程)使用cmake (1) 1.開始建立第一個AS 工程; 2.選擇完畢後下一步 3.再下一步後直接點選完成,然後我們開始執行一下,即可看到Hello from JNI 4.下面我們看下CMakeLists.txt檔案 CMak

ndk-build配置、Android Studio jni的配置以及jni常見問題的解決

           最近專案用到了jni比較頻繁,android studio 配置jni也是必須的。但不知道是不是運氣問題,我在自己電腦使用jni一點問題都沒有,可以說是無障礙。 但是,一

Android Studio 快速實現上傳專案到Github(詳細步驟)

前言: 本文主要講解如何將Android Studio專案上傳至GitHub,在此之前,先介紹幾個概念。 Android Studio:是谷歌推出一個Android整合開發工具,基於IntelliJ IDEA,類似 Eclipse ADT,Android Studio 提供了整合的 Android 開發工具用

Android studio實現記住密碼(SharePreference)

    1.首先,我們都希望我們的資訊可以得到儲存,而不希望我們下一次上線我們原來的資訊就沒了,我們就要選擇一種方法儲存我們的資訊,而AS裡面也有很多的方法讓我們儲存我們的資訊,如資訊流之類的,但AS提供了一個可以令我們更加便捷儲存我們資訊的工具,就是SharePrefere

Android Studio JNI開發,Java+C++

前提:Mac平臺,windows平臺僅供參考。 1,準備工作。 1.1,檢視你的jdk是否有javah編譯功能:終端-》whereis javah 如果沒有找到這條指令,請檢視你是否安裝的是JDK較高版本,如果是jdk10,恭喜你這裡邊沒有javah的命令了,你需要更換你的jdk為

如何配置android studio環境實現ionic的編譯,執行與打包

1.配置android studio 環境; 1.1配置java環境 下載jdk,jre(jre好像是跟jdk一起的,jdk1.8.0_101,jre1.8.0_101) 參考文件:如何配置jdk,jre的參考文件 配置的環境變數:PATH(jre/b

android studio 免費實現聊天視訊功能

             免費實現聊天視訊功能:環信即時通訊整合的詳細步驟 1、通過github下載sdkdemoapp3.0_android-sdk3.0點選開啟連結、easeui-sdk3.0點

℃江讓您從精通到入門:Android Studio 簡單實現ViewPager,可做APP操作提示

前期準備,如下圖: 第一步、先書寫佈局檔案:activity_main.xml檔案如下: <?xml version="1.0" encoding="utf-8"?> <Re

Android Studio實現隱藏標題欄和狀態列的閃屏頁

之前在Eclipse下實現理想的全屏閃屏頁,同樣的程式碼拷貝到AS下仍然可以看見標題欄和狀態列,不知道是不是因為AppCompatActivity的原因。 方案一:在程式碼中動態隱藏標題欄和狀態列,但是失敗了。 方案二: 首先在style.xml裡新建resource

Android Studio JNI開發

1首先下載NDK.在Android中配置NDK. 如下圖所示: 也可以開啟local.properties檔案新增下面程式碼, ndk.dir=D:\Android\android-ndk-r10 記得路徑自己修改一下. 2. 在

android studio 如何實現RadioBotto和RadioGroup來實現單選按鈕的選擇

實現單選功能的控制元件     一組RadioButton必須放在一個RadioGroup中    意思就是說單選按鈕中的值我們可以看作是一個數組也就是這裡說的這個陣列是RadioGroup陣列中的值是RadioButton,在這個陣列中我們通常都有且只能選擇一個值,而這個

Android studio RecyclerView實現炫酷吸頂效果

public class SectionDecoration extends RecyclerView.ItemDecoration { private List<NameBean> beanList; private TextPaint textPaint; priva

Android 通過JNI實現守護程序,使Service服務不被殺死

開發一個需要常住後臺的App其實是一件非常頭疼的事情,不僅要應對國內各大廠商的ROM,還需要應對各類的安全管家...  雖然不斷的研究各式各樣的方法,但是效果並不好,比如工作管理員把App幹掉,服務就起不來了... 網上搜尋一番後,主要的方法有以下幾種方法,但其實也都