連載
又見(jiàn)一簾幽夢(mèng),jni .a的故事還在繼續(xù)矾飞。原本打算跟 mk方式 一起一膨,名字都想好了,大道三千洒沦,我只取二瓢豹绪。燃,故事開(kāi)始申眼。
gradle-experimental
故事的豬腳瞒津。一個(gè)插件,專門(mén)為 JNI 服務(wù)括尸。E文好的同學(xué)巷蚪,大體也猜出來(lái)了,這個(gè)是谷狗實(shí)驗(yàn)室里邊的玩意濒翻。東西屁柏,是好東西,就是實(shí)驗(yàn)二字有送,呵呵呵呵淌喻。純粹的gradle方式,取代mk娶眷,構(gòu)建一體化似嗤,夢(mèng)想是美好的。但届宠,但谷歌似乎沒(méi)怎么放心上烁落。閑話不多說(shuō),欲修煉此功豌注,需注意幾點(diǎn)伤塌。
注1. 項(xiàng)目 gradle 依賴
對(duì)于 gradle-experimental, 我是滿頭欣喜的轧铁。一體化每聪,純粹的gradle,讓我不得不欣賞。一見(jiàn)鐘情药薯,再而衰绑洛,三而竭。手起刀落童本,一個(gè)配置的更換真屯,讓我走上了渡劫之路。配置如下:
buildscript {
...
dependencies {
/**
* 從前 classpath 'com.android.tools.build:gradle:2.2.3'
* 由于插件的更換穷娱,蝴蝶來(lái)到了太平洋绑蔫,一系列隨之而來(lái)
*/
classpath 'com.android.tools.build:gradle-experimental:0.9.3'
}
}
注2. 當(dāng)前app module配置
自己的決定,站起來(lái)就是擼泵额。app module配深,作為渡劫場(chǎng)所,緊張刺激的準(zhǔn)備工作馬上就要開(kāi)始了嫁盲。你看:
app應(yīng)用插件調(diào)整篓叶,
//從前, apply plugin: 'com.android.application'
apply plugin: 'com.android.model.application'
由于加持了 model 插件, 渡劫被限制在作用域 model 中亡资,氣場(chǎng)就是不一樣澜共, 穩(wěn)了。見(jiàn)識(shí)見(jiàn)識(shí):
model{
...
android{
}
}
渡劫锥腻,要有渡劫的樣子,以前的配置母谎,自然得有個(gè)小增強(qiáng)瘦黑。瞧,幾顆栗子:
model{
...
android{
...
defaultConfig {
···
//從前車(chē)馬慢奇唤,minSdkVersion 19
minSdkVersion.apiLevel 9
targetSdkVersion.apiLevel 19
}
}
}
注3. 核心配置
渡劫路上幸斥,需要依賴于.a靜態(tài)庫(kù),成就so咬扇。首先定義對(duì)于庫(kù)的repositories甲葬,用來(lái)指定庫(kù)的基本信息,包括庫(kù)文件的路徑懈贺,頭文件的路徑以及鏈接的方式等经窖,詳見(jiàn)如下代碼:
model {
...
repositories {
libs(PrebuiltLibraries) {
libHello {
// 頭文件地址
headers.srcDir "src/main/jni/sources/"
// 靜態(tài)鏈接庫(kù)的引用,
binaries.withType(StaticLibraryBinary) {
staticLibraryFile = file("src/main/jni/sources/${targetPlatform.getName()}/libHello.a")
}
}
}
}
}
渡劫,成功的關(guān)鍵 —— NDK 配置梭灿,然后gradle一下画侣,渡劫開(kāi)始。NDK配置已經(jīng)多有熟悉堡妒,但這里又有少許區(qū)別 配乱。詳情吐下:
model{
...
android{
...
ndk {
moduleName "JniDemo"
//書(shū)信很遠(yuǎn), cppFlags "-std=c++11"
cppFlags.add("-std=c++11") //c++版本
stl "gnustl_static" //支持 stl 標(biāo)準(zhǔn)庫(kù)
// 配置可多個(gè), abiFilters "armeabi", "armeabi-v7a", "x86"
// abiFilters.addAll(['armeabi', 'armeabi-v7a', 'x86'])
}
}
}
結(jié)語(yǔ)
到這,已經(jīng)在渡劫路上越走越遠(yuǎn)了搬泥。對(duì)于 mk桑寨, gradle-experimental,本來(lái)想做個(gè)對(duì)比的忿檩。后面想想西疤,各有千秋,都是基于 NDK build休溶。至于選擇如何代赁,暫且不提,各有所好罷了兽掰。期待下一次的相遇芭碍,下一次的精彩。
附送一張github機(jī)票孽尽,帶你領(lǐng)略世界的浩瀚