1. 程式人生 > >Android進階之路(一) -- AS 3.0NDK環境搭建及hello world

Android進階之路(一) -- AS 3.0NDK環境搭建及hello world

通過一段找實習的經歷,以及快應用、小程式、web app等移動開發模式的衝擊,深深為安卓原生開發的未來感到擔憂,希望接入人工智慧API和物聯網井噴能給安卓開發帶來新的生機吧。

當然,作為小白我是不用擔心這麼多的,做自己喜歡的事就好了,於是拋開雜念,繼續學習安卓。

NDK開發環境的搭建

相信很多人都在用Android Studio開發安卓了,當然,我也是用AS開發的,所以就用AS開始NDK開發環境的搭建。

我們用最簡單的方式,在Setting或者SDK Manager找到如下介面,選中CMake和NDK後Apply。


CMake是可選項,很熟悉C並且不嫌麻煩的可以不選此項。

安裝的時間還是挺長的,利用這段時間,我們來學習一下NDK的開發流程。

1、java類中宣告native方法

2、建立C/C++檔案、實現native方法

3、在CmakeLists.txt中新增檔案路徑

4、靜態程式碼塊中載入library

5、呼叫native方法

我們來操作一下:

首先新建專案,新增C++支援,一路next,finish之後,我們發現目錄結構比不加NDK的多了一點東西,其中

cpp和CMakeLists.txt,是我們接下來要用到的。


1、宣告native方法

java目錄下任意一個包裡新建一個類,建立一個native方法,注意不能加方法體。


2、建立C/C++檔案

cpp目錄下新建一個c/c++ source file,我把它命名為hello,並實現sayHello方法


3、配置CMakeLists.txt,哇,好多英文啊,但實際上去掉#註釋的內容,實際的配置並不多,而且我們今天需要關注的只有add_library()這一塊。


英文不好如我都能大概看懂是什麼意思,相信你也可以的,

第一項是library的名字,這個需要記住,一會兒要用到,

第二個是設定庫型別,可以設定成靜態庫,動態庫,模組庫之類的,以後學習到再詳細介紹。

第三個是原始檔路徑,在這裡,我們需要把寫好的hello.cpp新增進來。

新增之後是這樣的


4、靜態程式碼塊中載入library

這是是通過System.loadLibrary方法把我們的庫加進專案,使之能正常執行。


5、呼叫native方法

執行結果,如下


當然,開發步驟可以根據實際需要做調整

附贈一種AS3.0下解決包衝突的方式

    api("com.github.bumptech.glide:glide:3.6.1") {
        exclude group: 'com.android.support'
    }
api是AS3.0新新增的依賴方式,group指只要包含冒號後面的包都會刪除,親測還是挺有效的。

相關推薦

Android -- AS 3.0NDK環境搭建hello world

通過一段找實習的經歷,以及快應用、小程式、web app等移動開發模式的衝擊,深深為安卓原生開發的未來感到擔憂,希望接入人工智慧API和物聯網井噴能給安卓開發帶來新的生機吧。當然,作為小白我是不用擔心這麼多的,做自己喜歡的事就好了,於是拋開雜念,繼續學習安卓。NDK開發環境的

慕課 從零到spark

1.RDD RDD是spark特有的資料模型,談到RDD就會提到什麼彈性分散式資料集,什麼有向無環圖,本文暫時不去展開這些高深概念。 (0)隨便找個點理解以下 最重要的記住,RRD是不可變的,也就是說,已有的RDD不能被修改或者更新,但可以從已有的RDD轉化成一個新的RDD. 上面的

Java小白

1、字串操作:replace方法(舊字串,新子串)。 Scanner scanner = new Scanner(System.in); System.out.println("請輸入"); // 接收使用者的輸入的字串 String s1 = scanner.next(); // 接受整型 i

Linux:部署

經過長期的開發工作,在專案中經常會需要將打包好的專案部署到Linux伺服器上,不過,在此之前需要掌握一些Linux常用命令比如ls、ll、ps -ef|grep java 、cp、tail 等等,詳細的可以百度查一下,還是很多的。接下來,就說一下關於專案的部署。 首先需要一個遠端訪問Linu

Android -- JNI互動

今天繼續學習C與Java通過JNIEnv互動。昨天學習了C與Java互動方法,但感覺太輕鬆了,就像呼叫findViewById一樣簡單,可能是我遺漏了什麼東西,於是就想在今天繼續研究這一塊兒的內容,順便做一下總結。C呼叫Java的方法和訪問Java中的變數都是通過JNIEnv

Android -- NDK初探

繼續學習NDK開發,今天來實現一個簡單的計算器功能,NativeUtil類中有一個靜態的native方法,它接收三個引數,分別是兩個運算元和一個操作符,並且返回C的計算結果。NativeUtil類定義如下public class NativeUtil { static

React

在開始 React 學習之前我們先進入官網 https://react.docschina.org/ 看看官方對 React 的解釋:React 是用於構建使用者介面的JavaScript 庫。我們只需要知道這點就夠了,對於其他的解釋當我們深入學習之後就會自然而然地懂了。 本文將按照官網

koa2 從入門到

首先我們先來了解一下 Koa 是什麼,https://koa.bootcss.com/,這是 Koa 的官方網站,映入眼簾的第一句就是 Koa -- 基於 Node.js 平臺的下一代 web 開發框架。 在學習 Koa 之前我們應對 Node.js 有一定的基礎,我們都知道: No

Python 爬蟲從入門到

通用爬蟲和聚焦爬蟲 根據使用場景,網路爬蟲可分為 通用爬蟲 和 聚焦爬蟲 兩種. 通用爬蟲 通用網路爬蟲 是 捜索引擎抓取系統(Baidu、Google、Yahoo等)的重要組成部分。主要目的是將網際網路上的網頁下載到本地,形成一個網際網路內容的映象備份。 通用

Java 從入門到

寫在前面:從本片文章開始,將記錄自己學習 Java 的點滴路程,目標定的並不是讓自己成為一個 Java 高手,而是讓自己多掌握一門語言,使自己的知識面更廣一些,在學習 Java 的過程中如有不對的地方還請各位大佬批評指教。 在之前看過一些文章,說網際網路知識到底要學到什麼程度,有人認為不在多而在精,有人認為

ICProteus-Arduino模擬環境搭建

開發十年,就只剩下這套架構體系了! >>>   

Android 我的部落格文章目錄

為了方便讀者閱讀以及自己回顧,總結寫過的文章和一些想要寫的文章目錄如下: #1.Java 反射: 集合: 異常 IO / NIO #2.資料結構與演算法 資料結構: 演算法: #3.設計模式 #4.架構設計 MVC 的思路與實現 MVP 的

JavaScript的函數簡介,變量、作用域和內存問題

ret 優化 person get 簡介 web瀏覽器 都是 add 是把 <h3>ECMAScript中函數不存在函數簽名的概念,沒有重載</h3><h3>無需指定返回值,可以在任何時候返回任何值。未指定返回值的函數,返回的是一個特殊

JavaScript的引用類型Object類型和Array類型

reverse 代碼 -1 替換 fine 設置 sha unshift sum 引用類型 Object類型 function a(num){ if(num>3){ a(--num); } console.log(num);

C#反射的應用

  反射在C#中的應用還是很多的,但它對程式碼的效能有一定影響。 反射的效能:   使用反射來呼叫型別或者觸發方法,或者訪問一個欄位或者屬性時clr 需要做更多的工作:校驗引數,檢查許可權等等,所以速度是非常慢的。所以儘量不要使用反射進行程式設計,對於打算編寫一個動態構造型別(晚繫結)的應用程

Python基礎元組、字典和字符串

python基礎 tag 基礎 block 場景 分隔 應用場景 agg bsp 元組 元組的定義 Tuple(元組)與列表類似,不同之處在於元組的 元素不能修改 元組 表示多個元素組成的序列 元組 在 Python 開發中,有特定的應用場景 用

Python基礎元組、字典和字串

元組 元組的定義   Tuple(元組)與列表類似,不同之處在於元組的 元素不能修改     元組 表示多個元素組成的序列   元組 在 Python 開發中,有特定的應用場景   用於儲存 一串 資訊,資料 之間使用

Python基礎字串

字串 字串的定義 字串 就是 一串字元,是程式語言中表示文字的資料型別 在 Python 中可以使用 一對雙引號 " 或者 一對單引號 ' 定義一個字串 雖然可以使用 \" 或者 \' 做字串的轉義,但是在實際開發中: 如果字串內部需要使用 ",可以使用 ' 定義字串 如果字串內部需要使用

Pandas使用DataFrame進行資料分析比賽:日期資料處理:按日期篩選、顯示統計資料

首先,表格的資料格式如下: 1、獲取某年某月資料 data_train = pd.read_csv('data/train.csv') # 將資料型別轉換為日期型別 data_train[

我的安卓

    這周結束了“活動”,開始了UI的征程。     1、七大控制元件           踩的兩個小坑          第一個,ImageView即圖片控制元件,名稱必須以字母開頭。如1img不行,而img2可以,倒是和變數名的命名相類似。          第