Android Studio下使用CMake是一種怎樣的體驗(yàn)

上次記述了在Android Studio下使用NDK是一種怎樣的體驗(yàn)微王,
過(guò)程較為繁瑣顽馋,需要記住比較多的指令皱碘,這是比較頭疼的地方猾蒂。
上次更新SDK工具的時(shí)候無(wú)意中發(fā)現(xiàn)列表下有一個(gè)CMake的選項(xiàng)均唉,從命名中就明顯感覺(jué)到這應(yīng)該和C相關(guān),心想莫非此工具已經(jīng)有更好的方法編寫C函數(shù)了肚菠?于是乎下載舔箭,網(wǎng)上一頓亂氣之后,大概是知道了一點(diǎn)皮毛,深感其用法之簡(jiǎn)單层扶,絕非NDK常規(guī)用法所能比的箫章,大喜,遂記之镜会。
----于20170109

示例demo傳送門---------go ----HelloCMake

1檬寂、配置

a)下載CMake,最好是使用Android Studio下載

File->Settings->Appearance&Behavior->System Settings->Android SDK->SDK Tools勾選CMake

b)在module下新建cpp文件夾戳表,用于存放.cpp文件桶至。
c)配置build.gradle,加入

    defaultConfig{
        externalNativeBuild {
            cmake {
                cppFlags ""
            }
        }
    }
  android{
        externalNativeBuild {
            cmake {
                path "CMakeLists.txt"
            }
        }
  }

d)建立cpp文件
在main/java同級(jí)下的cpp文件夾下新建cpp文件匾旭,so-demo.cpp

e)編寫CMakeLists.txt文件
例子如下

#CMake版本
cmake_minimum_required(VERSION 3.4.1)
#添加的cpp文件
add_library( so-demo SHARED src/main/cpp/so-demo.cpp )
#log
find_library( log-lib log )
#生成的目標(biāo)so
target_link_libraries( so-demo ${log-lib} )

2镣屹、編寫cpp

a)新建類,聲明cpp方法价涝,public native ... 關(guān)鍵字 native

package amos.com.hellocmake.soutil;

/**
 * @author kuan.liang
 */
public class SoUtils {

    private static SoUtils instance = null;

    public static SoUtils getInstance(){
        if(null == instance){
            synchronized (SoUtils.class){
                if(null == instance){
                    instance = new SoUtils();
                }
            }
        }
        return instance;
    }
    //測(cè)試方法
    public native String getStringFromJni();
}

b)編寫cpp女蜈,Android Studio下鼠標(biāo)移至native函數(shù),Alt+Enter使用智能提示可快速生成函數(shù)色瘩,如下伪窖,將方法置于extern "C"{}內(nèi),使用C的形式編寫代碼

#include <jni.h>
#include <string>
extern "C"{
JNIEXPORT jstring JNICALL
Java_amos_com_hellocmake_soutil_SoUtils_getStringFromJni(JNIEnv *env, jobject) {
    std::string hello = "Say hello from JNI";
    return env->NewStringUTF(hello.c_str());
}
}

3居兆、構(gòu)建運(yùn)行

首先需要引用生成的so庫(kù)惰许,適當(dāng)?shù)胤郊虞d。按照構(gòu)建apk的辦法進(jìn)行構(gòu)建史辙,可直接run汹买,也可以使用Gradle等。

// 務(wù)必在方法調(diào)用之前加載
System.loadLibrary("so-demo");

構(gòu)建完成聊倔,可以在build/intermediates/cmake下得到相應(yīng)的so庫(kù)晦毙,可拷貝至其他工程使用。

4耙蔑、結(jié)束

使用CMake大大降低了編寫C的難度见妒,而且配置簡(jiǎn)單,亦可以不寫一大堆的.h頭文件了甸陌,不失為一種較優(yōu)的選擇须揣。
源代碼OSGit地址:AndroidNDK - HelloCMake

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市钱豁,隨后出現(xiàn)的幾起案子耻卡,更是在濱河造成了極大的恐慌,老刑警劉巖牲尺,帶你破解...
    沈念sama閱讀 217,734評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件卵酪,死亡現(xiàn)場(chǎng)離奇詭異幌蚊,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)溃卡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門溢豆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人瘸羡,你說(shuō)我怎么就攤上這事漩仙。” “怎么了犹赖?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,133評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵讯赏,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我冷尉,道長(zhǎng)漱挎,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,532評(píng)論 1 293
  • 正文 為了忘掉前任雀哨,我火速辦了婚禮磕谅,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘雾棺。我一直安慰自己膊夹,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,585評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布捌浩。 她就那樣靜靜地躺著放刨,像睡著了一般。 火紅的嫁衣襯著肌膚如雪尸饺。 梳的紋絲不亂的頭發(fā)上进统,一...
    開(kāi)封第一講書(shū)人閱讀 51,462評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音浪听,去河邊找鬼螟碎。 笑死,一個(gè)胖子當(dāng)著我的面吹牛迹栓,可吹牛的內(nèi)容都是我干的掉分。 我是一名探鬼主播,決...
    沈念sama閱讀 40,262評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼克伊,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼酥郭!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起愿吹,我...
    開(kāi)封第一講書(shū)人閱讀 39,153評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤不从,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后洗搂,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體消返,經(jīng)...
    沈念sama閱讀 45,587評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,792評(píng)論 3 336
  • 正文 我和宋清朗相戀三年耘拇,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了撵颊。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,919評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡惫叛,死狀恐怖倡勇,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情嘉涌,我是刑警寧澤妻熊,帶...
    沈念sama閱讀 35,635評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站仑最,受9級(jí)特大地震影響扔役,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜警医,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,237評(píng)論 3 329
  • 文/蒙蒙 一亿胸、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧预皇,春花似錦侈玄、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,855評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至鲁豪,卻和暖如春潘悼,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背爬橡。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,983評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工挥等, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人堤尾。 一個(gè)月前我還...
    沈念sama閱讀 48,048評(píng)論 3 370
  • 正文 我出身青樓肝劲,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親郭宝。 傳聞我的和親對(duì)象是個(gè)殘疾皇子辞槐,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,864評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容