1. 程式人生 > >AS jni呼叫入門(附圖)

AS jni呼叫入門(附圖)

如題AS呼叫jni示例:

一、AS環境配置

1、初始步驟:本人開發環境為AS2.1.1

2、下載NDK,SDK沒有下載的小夥伴就自行解決吧(沒有NDK的小夥伴在紅框的位置會有下載地址,可自行下載)


3、如果沒有真機的小夥伴可以下載Genymotion模擬器,安裝流程網上大把,有真機的可以忽略。

基礎配置基本就這些,下面進行記錄下我的第一個NDK專案,附和網上的大篇文章類似,不同在於我會把bug以及詳細解決方案給出

二、建立專案

1、這步沒什麼好說的,new個android 的專案就ok

2、新建檔案


public class JniTest {
    static{
        System.loadLibrary
("JniTest");//jni模組載入名稱 } public native String getJniString();//該方法是紅色的,暫時不用理會 }

3、編譯生成.class檔案


生成目錄

4、生成.h檔案

(1)首先進入開啟Terminal,進入對應的工程目錄下,訪問build/intermediates/classes/debug目錄下



(2)生成標頭檔案,java的環境變數配置這裡就不說了,網上一大把,執行命令後不會馬上看見.h檔案,關閉下debug檔案,再重新開啟,我們.h檔案就會看到了

(3)新建一個jni的存放目錄,如圖點選後選擇finish即可,如果想改變存放目錄可根據自己需求操作,然後將剛剛生成的.h檔案copy過來,然後新建cpp檔案,檔名稱隨意,然後需要我的操作是copy了一份已經除錯成功的c程式碼片段進行改正如圖:


紅色部分就是我們要改正的部分,改正後如圖:

1、include的替換成我們自己的.h檔名稱

2、c程式碼方法名也對應換成我們.h檔案中的方法名

改正後程式碼:

#include "com_wang_ndk_JniTest.h"
/*
 * Class:     com_wang_ndk_JniTest
 * Method:    getJniString
 * Signature: ()Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_com_wang_ndk_JniTest_getJniString(JNIEnv* env, jobject obj) {
    return 
env->NewStringUTF("Hello from JNI !"); }

(5)OK到此步驟我們基本都搞定了,感覺比eclipse簡單好多,我們下一步要生成.so檔案,麻煩的問題來了,不是操作的多麻煩,而是會遇到各種離奇的bug,我們就根據bug提示進行依次修改。

首先進行.so的編譯生成,重新build下

1、第一個bug提示

Error:(12, 0) Error: NDK integration is deprecated in the current plugin.  
Consider trying the new experimental plugin.  
For details, see http://tools.android.com/tech-docs/new-build-system/gradle-experimental.  
Set "android.useDeprecatedNdk=true" in gradle.properties to continue using the current NDK integration.

解決方案:根據bug提示的內容進行配置,配置OK後繼續編譯


2、第二個bug個有點奇怪,不是每次都出現,如果出現的小夥伴可按這種方式處理。編譯過程種提示我無法刪除debug檔案,根據提示找到了classes下的debug檔案,是一個空資料夾,果斷刪除,卻提示我IO異常,最後的解決方法就是關掉AS,去工程檔案下把debug檔案找到並刪除,然後重新進來後再編譯,這樣就Ok了




3、注意細節的小夥伴已經發現原先我們新建的JniTest類的方法是提示紅色的,現在已經沒有了,之後我再gradle中加入呼叫模組名稱

此名稱應與loadLibaray種呼叫的名稱一致

static{
    System.loadLibrary("JniTest");//jni模組載入名稱
}

4、呼叫,執行OK




相關推薦

AS jni呼叫入門附圖

如題AS呼叫jni示例: 一、AS環境配置 1、初始步驟:本人開發環境為AS2.1.1 2、下載NDK,SDK沒有下載的小夥伴就自行解決吧(沒有NDK的小夥伴在紅框的位置會有下載地址,可自行下載) 3、如果沒有真機的小夥伴可以下載Genymotion模擬器,安裝流程網上大

MVVM Light 新手入門2 :ViewModel / Model 中定義屬性 ,並在View中呼叫 利刃 MVVMLight

今天學習MVVM架構中“屬性”的新增並呼叫,特記錄如下,學習資料均來自於網路,特別感謝翁智華的利刃 MVVMLight系列。   一個視窗的基本模型如下: View(檢視) -> ViewModel (檢視模型)-> 多個Model(模型) 注: 檢視是使用者在螢幕上看到

spring cloud 入門【Eureka註冊中心,微服務之間服務呼叫方式二FeignClient進行服務呼叫

FeignClient 支隊服務消費方進行修改,服務提供方不需要修改   還是對  User 進行修改  UserApplication 中新增  @EnableFeignClients UserApplication 程式碼如下: pac

spring cloud 入門【Eureka註冊中心,微服務之間服務呼叫方式一LoadBalancerClient 以及RestTemplate 進行服務呼叫

構建第二個微服務 menu 程式碼結構如下   MenuApplication 程式碼如下: package com.study.menu; import org.springframework.boot.SpringApplication; import org

SpringCloud實戰之初級入門— 服務註冊與服務呼叫

目錄 1.環境介紹 2.服務提供 2.1 建立工程 2.2 修改配置檔案 2.3 修改啟動檔案 2.5 親測注意事項 3.服務呼叫 3.1 建立工程 3.2 修改配置檔案 3.3 修改啟動檔案 3.4 建立第一

學習筆記| AS入門 佈局篇

在我們之前的學習過程中,總是需要和.xml佈局檔案接觸,那佈局到底是什麼呢?佈局是指頁面內容該如何排布,比如控制元件和父容器的位置關係以及控制元件與控制元件之間的位置關係是怎樣的。其實除了最常見的LinearLayout 線性佈局、RelativeLayout

springCloud入門遠端呼叫方法

新建一個客戶端呼叫已經註冊的遠端伺服器方法: pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xml

AS入門

刪除Module         方法一:右鍵所要刪除的module --> Open module Settings (或f12)--> 選中要刪除的module-->點左上角紅

Kafka 入門--安裝配置和 kafka-python 呼叫

一、Kafka 簡介 1.基本概念   Kafka 是一個分散式的基於釋出/訂閱訊息系統,主要應用於大資料實時處理領域,其官網是:http://kafka.apache.org/。Kafka 是一個分散式、支援分割槽的(Partition)、多副本的(Replica),基於 ZooKeeper 協調的釋出/訂

webpack 入門0官翻

app 沒有 解決 ebp 回車 dir pts config 問題 0 建議最好全局先安裝一下webpack npm install webpack -g 1 新建一個文件夾,打開該文件夾,初始化package.json文件,安裝好webpack依賴 (都是基礎的li

python入門

html pre uic 程序 添加 -a 控制臺 命令 成了 第一步,我們先來安裝Python,博主選擇的版本是最新的3.4.2版本。windows下面的Python安裝一般是通過軟件安裝包安裝而不是命令行,所以我們首先要在Python的官方主頁上面下載最新的Python

Canvas入門1:繪制矩形、圓、直線、曲線等基本圖形

dsm etc win cti b2c 創建 例如 .com courier 來源:http://www.ido321.com/968.html 一、Canvas的基礎知識 Canvas是HTML 5中新增的元素,專門用於繪制圖形。canvas元素就相當於一塊“畫布

數字IC低功耗設計入門——功耗的分析

layout 變化 監視 merge obj source divide 傳播 總結   前面學習了進行低功耗的目的個功耗的構成,今天就來分享一下功耗的分析。由於是面向數字IC前端設計的學習,所以這裏的功耗分析是基於DC中的power compiler工具;更精確的功耗分析

Android中關於JNI 的學習對於JNIEnv的一些認識

else size 初步 jint 使用 包括 pri jnienv 就會 一個簡單的樣例讓我們初步地了解JNI的作用,可是關於JNI中的一些概念還是須要了解清楚,才可以更好的去利用它來實現我們想要做的事情。 那麽C++和Java之間的是怎樣通過JNI來進行互相調用的呢

面向對象入門封裝

detail clas 方法 pri 調用 pytho 根據 python 構造 編程的方式: ·面向過程:根據業務邏輯從上到下壘代碼 ·函數式:將某功能代碼封裝到函數中,通過調用函數來簡潔代碼 ·面向對象:對函數進行分類和封裝,讓開發變得“更好、更快、更強” 面向

數據庫入門

數據庫入門 數據庫軟件 java平臺 1.數據保存 數據保存在內存: 優點: 存取速度快 缺點: 數據不能永遠保存 數據保存在文件: 優點: 數據永遠保存 缺點:

Storm入門HelloWorld示例

right 出現 9.png context color tro order tput 執行 一、關聯代碼 使用maven,代碼如下。 pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:x

Storm入門Storm實戰常見問題總結

logger 2.x appenders exec 問題 一個 新建 round XML 一、本地環境log級別設置問題 storm-core-1.1.0.jar下面有個log4j2.xml文件,默認log級別是info。 <configuration monitor

maven入門2settings.xml

file option 一個 keyword files 合並 遠程倉庫 pac nbsp 一、簡介 settings.xml對於maven來說相當於全局性的配置,用於所有的項目, 當Maven運行過程中的各種配置,例如pom.xml,不想綁定到一個固定的project或者

maven入門5使用eclipse構建maven項目

org 菜單欄 ini tag 界面 java 我們 core comm 1. 安裝m2eclipse插件 要用Eclipse構建Maven項目,我們需要先安裝meeclipse插件 點擊eclipse菜單欄Help->Eclipse Marketplac