1. 程式人生 > >AS1.3 及其以上預覽版新外掛-實驗版(NDK)

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   堆分為大頂堆,和小頂堆。 什麽是堆? 堆可以看成是一棵二叉樹,二叉樹的元素是一個數組不斷的從左到右輪訓放置。如果是大頂堆,則大的數放上面一層,小的數放下面一層。上一層的數,一定大於下一層的數。小頂堆則相

dockermysql的使用和配置1——docker的基本操作

spa uci 信息 5.5 8.0 ash 隨機 server expec 最近實在是忙成狗,其他的內容等稍微閑一點了一起更新。 這篇主要是講docker版的mysql的使用和配置信息。因為實習公司需要搞一個docker做測試環境用,還需要包括基本的依賴。最重要的是,因為

dockermysql的使用和配置2——dockermysql的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