AS1.3 及其以上預覽版新外掛-實驗版(NDK)
序
在新版的AS預覽版中我發現對於NDK的支援有所變化。
在新的外掛版本中加強了對NDK的支援以及效能的優化。
於是查詢了一下文件,特此寫了該文章,為嚐鮮的朋友準備,喜歡嚐鮮的朋友可以試試,個人感覺味道不錯。
在之前版本的時候我寫過如何在AS中編譯NDK:
[Android] 環境配置之Android Studio開發NDK
本篇文章是一篇半翻譯文章,來源於AS的說明文件,在文章底部會附上原文連結。
本篇文章中的東西來源於預覽版,本文章中的方法已測試有效;但不建議用於生產開發。
介紹
這是一個新的試驗性外掛,該組建基於新的Gradle組建模型;在配置上能顯著減少時間。在新的外掛中包括了使用JNI開發NDK的一鍵式操作。在本指南中提供了詳細的使用方式,同時強調了新的外掛與原始外掛之間的區別。
警告:該外掛是試驗性外掛。有關該外掛的Gradle API也並不是最終版本。這意味著他只是特定版本的API,也可能只能在特定版本中使用。
此外。DSL可能發生大量改變,在最終版本中有可能採用新的API代替。
該實驗外掛是改善了NDK整合與效能相關的早期預覽版本(這兩個問題來自於使用者反饋)。
需求
- Gradle 2.5 (僅僅)
- Android NDK R10e 版本(如果你需要使用NDK)
- SDK 構建工具最低版本 19.0.0 ,一些功能可能需要更新的版本
- AS 1.3 預覽版及其更高版本
遷移
從之前版本遷移到最新預覽版。在下面顯示了新的預覽版的專案結構,更改的地方使用紅色表示。
./gradle/wrapper/gradle-wrapper.properties
新的外掛僅僅只支援 gradle-2.5.
#Wed Apr 10 15:27:10 PDT 2013
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https://services.gradle.org/distributions/gradle-2.5-all.zip
./build.gradle
其中Classpath 應該配置為 com.android.tools.build:gradle-experimental
以前是 com.android.tools.build:gradle
當前可使用版本為: 0.2.0.
// 提示: 頂層配置,你也可以在你的子專案或者子Model中新增對應配置
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle-experimental:0.2.0'
// 提示: 別把專案所需依賴寫在這裡,他們屬於Model中的 build.gradle 檔案
}
}
allprojects {
repositories {
jcenter()
}
}
./app/build.gradle
在該外掛中有著許多有關DSL變化。其中很多變化似乎有些奇葩,並不必要;因為在我看來外掛變化應該儘量簡單以減少外掛遷移的代價。
DSL 變更:
- Apply 預設外掛名現在是
com.android.model.application
在之前的版本中是:com.android.application
. 如果我們的Model是另外的庫或者aar 那麼現在應該為:com.android.model.library
- 根配置應該加上 model { } 模組
- 大多屬性應該加上
'='
操作符 - 如果是為集合新增對應的元素應該使用
'+='
操作符
使得 DSL 更侷限性的變更:
- buildTypes, productFlavors 和 signingConfigs 配置必須寫在 android { } 模組以外
- 能在 android { } 模組中巢狀使用的配置需要加上
with
關鍵字. - 屬性也將只能使用所支援的直接屬性,而沒法使用其他型別而後進行轉換(如果該屬性是int型別,將只能輸入int值,而不能是string字元然後強制轉換)。例如:
- 檔案型別屬性將直接接受檔案型別,而不接受String型別。
- 不能直接使用 minSdkVersion 接受一個 int 或者 string 型別,而需要寫為:
minSdkVersion.apiLevel = 15
.
- 建立一個buildType 或者 productFlavor 等標記需要呼叫
create
方法. 修改一個現有的,如buildType中的release或者debug標記可以直接使用名稱就可以了. - 現在修改DSL 的變數或者任務是非常非常侷限的.
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:22.2.0'
}
NDK 相關
在該實驗外掛中使用NDK建立Android本地程式。 你需要:
使用下載工具下載 NDK 包並配置好環境.
在專案local.properties
檔案中設定 ndk.dir
變數並指定你的 NDK 路徑,也可以在環境變數中設定 ANDROID_NDK_HOME 為你計算機上的 NDK 路徑.
在你的 model 中的 build.gradle
檔案中新增 android.ndk
板塊.
已知侷限
- 不支援NDK-only模組;僅僅支援混合的app或者lib庫的專案編譯。
- 編譯專案時並不會重複編譯已編譯完成的JNI程式碼(AAR庫中的所有so檔案僅僅只是簡單打包到APK中,不會進行重複編譯)。
- 不支援建立可依賴靜態庫。
- 不支援使用諸如
cpu_features
的NDK庫。 - 不支援整合外部構建系統。
Model 中的 build.gradle
中的 NDK 配置諸如這樣:
提示:專案中的 moduleName
屬性是必須的,它定義了 NDK 所生成的檔名。
預設情況下,JNI 檔案應該放到專案的目錄為:src/main/jni
,在其中你可以放C/C++程式碼;當然你也可以重新定義該預設目錄。
model {
android {
compileSdkVersion = 22
buildToolsVersion = "22.0.1"
}
android.ndk {
moduleName = "native"
}
android.sources {
main {
jni {
source {
srcDir 'src'
}
}
}
}
}
其他的編譯屬性你可以設定到android.ndk { }
模組中,諸如:
model {
android {
compileSdkVersion = 22
buildToolsVersion = "22.0.1"
}
android.ndk {
// 所有可以在 android.ndk 中定義的配置.
moduleName = "native"
toolchain = "clang"
toolchainVersion = "3.5"
// 提示:CFlags 是一個C的資源, 其命名與常規的屬性並不一樣. 這是一個技術限制,但在以後會解決。
CFlags += "-DCUSTOM_DEFINE"
cppFlags += "-DCUSTOM_DEFINE"
ldFlags += "-L/custom/lib/path"
ldLibs += "log"
stl = "stlport_static"
}
android.buildTypes {
release {
ndk.with {
debuggable = true
}
}
}
android.productFlavors {
create("arm") {
ndk.with {
// 你可以在 productFlavors 和 buildTypes 節點中配置 NDK 相關的屬性
abiFilters += "armeabi-v7a"
}
}
create("fat") {
// 如果未指定 ndk.abiFilters 屬性,那麼將會生成所有的CPU版本ABI.
}
}
// 你可以修改所有的 NDK 屬性
components.android {
binaries.afterEach { binary ->
binary.mergedNdkConfig.cppFlags.add(
"-DVARIANT=\"" + binary.name + "\"")
}
}
}
原文連結
案例
========================================================
相關推薦
AS1.3 及其以上預覽版新外掛-實驗版(NDK)
序 在新版的AS預覽版中我發現對於NDK的支援有所變化。 在新的外掛版本中加強了對NDK的支援以及效能的優化。 於是查詢了一下文件,特此寫了該文章,為嚐鮮的朋友準備,喜歡嚐鮮的朋友可以試試,個人感覺味道不錯。 在之前版本的時候我寫過如何在AS中編譯NDK
Camera 預覽之SurfaceView、TextureView、GLSurfaceView(三)
今天介紹下GLSurfaceView如何使用。GLSurfaceView的包名是android.opengl,由此可以它是opengl的一個類,它也可以預覽camera,而且在預覽camera上有比SurfaceView獨特的優勢,可以做到資料和顯示的分離,比如在沒有螢幕
js實現區域性列印及其列印預覽
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Test.aspx.cs" Inherits="WebApplication2.Test" %> <head runat="server"> <
Android 5.0 Camera系統原始碼分析(3):Camera預覽流程控制流
1. 前言 本文分析的是Android系統原始碼,從frameworks層到hal層,記錄了Camera進入預覽模式的重點程式碼,主要為控制流程的程式碼,有關影象buffer的傳遞暫不涉及,硬體平臺基於mt6735。由於某些函式比較複雜,在貼出程式碼時會適當對
Kafka Eagle V1.3.4更新預覽
1.概述 Kafka Eagle是一款開源的Kafka叢集監控系統,原始碼託管在Github。目前Kafka Eagle已更新到V1.3.4版本,域名已經統一更新為http://www.kafka-eagle.org/,之前的下載地址和官網使用手冊地址均已替換,例如http://download.smart
即將到來的Autodesk 主要產品2015版 產品和API新功能在線培訓(免費)
ont ref oca auto 即將 content span bsp 報名 一年一度的Autodesk主要產品和API在線培訓課程在5月份即將開始。我們呈獻給大家5個課程。1. Revit 2015 產品新功能及API 概覽2. Vault 2015產品新功能及API
上傳圖片快速預覽HTML5 FileReader + Window.URL+濾鏡(相容低版本IE)
在網頁中經常需要上傳圖片並進行預覽,大多數情況下是通過ajax將圖片上傳到後端,然後反饋上傳狀態和結果給前端進行預覽。這裡我們介紹三種快速的上傳圖片預覽方法,不需要後端參與也可快速進行圖片預覽。 FileReader文件 Window.URL文件 1.
【微信小程式遇到的坑】使用webSocket實現聊天功能 (支援圖片預覽 + 語音 + 檢視歷史聊天記錄 附完整程式碼)
在一般web服務中,大多使用短連線來向伺服器請求資源,與伺服器的互動頻率低,次數少。而在一些需要與伺服器互動頻繁,需要及時收到伺服器推送的場景,比如直播、聊天、多人實時遊戲,更適合使用 webSocket 進行通訊。 長連的生命週期介紹 webSocket的生命週期一共有
專案實戰:流水線影象顯示控制元件(列重新整理、1ms一次、縮放、拽拖、拽拖預覽、效能優化、支援OpenGL GPU加速)
需求 流水線影象掃描採集控制元件(帶模擬資料測試)效能需求 1.需至少滿足可1ms接收一次列資料,而不丟包(接收後可不必立馬顯示) 2.圖片重新整理率可達30HZ;限制需求 1.圖片高度最小隻能縮小為控制元件在介面顯的高度 2.控制元件在介面顯示的大小可任意調整,圖片可自適應控
《Java虛擬機原理圖解》 1.2.3、Class文件裏的常量池具體解釋(下)
and 支持 術語 一個 handle per ret mod make NO9.類中引用到的field字段在常量池中是如何描寫敘述的?(CONSTANT_Fieldref_info, CONSTANT_Name_Type_info) 一般而言。我們在定義
《C Primer Plus(第6版)(中文版)》普拉達(作者)epub+mobi+azw3
內存 處理 參考資料 預處理 表達 字符 rime 系統 位操作 內容簡介 《C Primer Plus(第6版)中文版》詳細講解了C語言的基本概念和編程技巧。 《C Primer Plus(第6版)中文版》共17章。第1、2章介紹了C語言編程的預備知識
USGS-EROS項目espa-surface-reflectance中的LaSRC Version 1.3.0模塊利用vs2010編譯出windows64位版本(一)
product 發現 jpeg git clone args dcl 函數 中一 比較 Landsat8衛星的大氣校正目前國內有很多學者都在做,隨便百度一下就能找到很多論文,提出的算法都有各自的亮點,學術研究上都有意義。 但是,問題來了,如果要真正拿出來處理任意一幅La
Cocos2d-x 3.0final 終結者系列教程13-貪食蛇遊戲案例(全)
track print return pla sprint 宋體 能夠 post world 快過節了。謝謝了屈原,我們愛你。 應該多幾個向屈大人一樣跳江的,這
Python抓取新浪新聞數據(二)
Python抓取新浪新聞數據以下是抓取的完整代碼(抓取了網頁的title,newssource,dt,article,editor,comments)舉例:Python抓取新浪新聞數據(二)
Python抓取新浪新聞數據(三)
Python抓取新浪新聞數據非同步載入一般在XHR下查找,但是沒有發現XHR下有相關內容。 Python抓取新浪新聞數據(三)
新唐ISP操作步驟(轉)
too 模式 usb 連線 com In 點擊 代碼下載 art 1,電腦上裝上“NuMicro_ICP_Programming_Tool_v1.18.5320.zip”;2,把目標板通過SWD口的NU-LINK連接到電腦的USB口上;3,打開桌面的“NuMicro ICP
數據結構Java版之堆&堆排序(九)
add lse spa led main AD 節點 之間 ren 堆分為大頂堆,和小頂堆。 什麽是堆? 堆可以看成是一棵二叉樹,二叉樹的元素是一個數組不斷的從左到右輪訓放置。如果是大頂堆,則大的數放上面一層,小的數放下面一層。上一層的數,一定大於下一層的數。小頂堆則相
docker版mysql的使用和配置(1)——docker的基本操作
spa uci 信息 5.5 8.0 ash 隨機 server expec 最近實在是忙成狗,其他的內容等稍微閑一點了一起更新。 這篇主要是講docker版的mysql的使用和配置信息。因為實習公司需要搞一個docker做測試環境用,還需要包括基本的依賴。最重要的是,因為
docker版mysql的使用和配置(2)——docker版mysql的dockerfile
啟動方式 oracl 端口號 sum war rms total htm clas 既然目標是定制滿足自己需要的dockerfile,那麽就來看看mysql的dockerfile長什麽樣。 dockerfile選擇的是 https://github.com/mysql/my
『中級篇』Docker企業版的在線免費體驗(56)
tle 應用程序 upload 世界 ogr toc sel http 利用 >原創文章,歡迎轉載。轉載請註明:轉載自IT人故事會,謝謝!>原文鏈接地址:『中級篇』Docker企業版的在線免費體驗(56) 如何免費試用docker enterprise,試用有2