Clion+Cmake+Ndk交叉編譯安卓Native源碼

最近在研究安卓脫殼技術(shù),從github上找到各種工具測(cè)試結(jié)果届巩。其中一個(gè)工具是DrizzleDumper。大神的代碼從GitHub上clone下來(lái)可以直接編譯運(yùn)行(因?yàn)榇嬖?code>makefile文件页衙,稍微修改后可以直接用make命令編譯出想要平臺(tái)的代碼疟位,當(dāng)然前提是提前配置好ndk環(huán)境變量),對(duì)于部分殼也有效果版扩。抱著學(xué)習(xí)的態(tài)度废离,我打算仔細(xì)閱讀并嘗試修改源碼,以便讓自己對(duì)脫殼的過程有更加深入的了解礁芦。

為了方便修改過程蜻韭,我打算使用Clion。新建C語(yǔ)言項(xiàng)目柿扣,將drizzleDumper.cdrizzleDumper.h文件導(dǎo)入項(xiàng)目復(fù)制到項(xiàng)目中并在CMakeLists.txt中添加源文件之后肖方,我們遇到了幾個(gè)問題:

1.Clion默認(rèn)引入了Mac系統(tǒng)自帶的頭文件,而不是Ndk中提供的文件未状,導(dǎo)致一部分定義報(bào)紅俯画。
2.原項(xiàng)目中的makefile默認(rèn)調(diào)用ndk-build工具編譯,而Clion使用的是cmake司草,這使得我們無(wú)法使用Clion完成編譯過程艰垂。

網(wǎng)上關(guān)于這些問題有比較詳細(xì)的解決方案,具體可以參照這篇文章:Clion配置Android NDK通過CMake進(jìn)行編譯埋虹。概括而言就是在Clion中配置一下猜憎,使得IDE能夠識(shí)別ndk的頭文件,并且能為目標(biāo)機(jī)器編譯代碼搔课。

下面是整個(gè)過程中配置cmake option這一步要注意的地方:

-DCMAKE_SYSTEM_NAME=Android
-DCMAKE_ANDROID_ARCH_ABI=armeabi-v7a
-DCMAKE_ANDROID_NDK=/Users/flower/Documents/DevEnv/android-ndk-r12b
-DCMAKE_SYSTEM_VERSION=19
-DCMAKE_C_FLAGS=""
-DCMAKE_CXX_FLAGS=""
-DCMAKE_ANDROID_NDK_TOOLCHAIN_VERSION=clang

1.第二行表示目標(biāo)系統(tǒng)架構(gòu)胰柑,由于我是為真機(jī)編譯,因此為armeabi-v7a爬泥,如果要為x86架構(gòu)的模擬器編譯程序旦事,應(yīng)當(dāng)改為x86
2.第三行表示當(dāng)前開發(fā)環(huán)境中Ndk路徑急灭。開始我按照參考文章姐浮,用的是Android Studio默認(rèn)下載的Ndk,結(jié)果應(yīng)用配置后一直報(bào)錯(cuò)葬馋。經(jīng)查找資料在官網(wǎng)找到了說明卖鲤,大概意思是因?yàn)槲覀冇昧朔荊oogle官方定制的cmake,有時(shí)候ndk版本偏高了會(huì)有問題畴嘶。這里我換成了之前下載過的一個(gè)低版本的ndk路徑蛋逾,完美解決了問題。

當(dāng)配置完成后窗悯,我們之前遇到的報(bào)紅應(yīng)當(dāng)已經(jīng)消失区匣,可以正常使用Clion編寫安卓平臺(tái)的Native代碼了。

但是后續(xù)編譯程序還有個(gè)問題蒋院,在adb shell運(yùn)行編譯好的程序會(huì)報(bào)一個(gè)如下的錯(cuò)誤:

error: only position independent executables (PIE) are supported.

估計(jì)還是配置的問題亏钩,網(wǎng)上說是在安卓4.4之后添加了新的保護(hù)機(jī)制,可執(zhí)行文件必須是采用PIE編譯的莲绰。我在原項(xiàng)目中的Android.mk中看到了這部分內(nèi)容:

# Allow execution on android-16+
LOCAL_CFLAGS += -fPIE
LOCAL_LDFLAGS += -fPIE -pie

但是在cmake中應(yīng)當(dāng)如何配置呢?經(jīng)過查找資料姑丑,發(fā)現(xiàn)這篇文章:cmake使用獨(dú)立工具鏈交叉編譯可在android中運(yùn)行的so包
蛤签。我在其中找到了要在CMakeList.txt文件中添加的關(guān)鍵兩行:

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIE")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fPIE -pie")

之后應(yīng)用一下更改,再編譯項(xiàng)目栅哀,就可以完美運(yùn)行啦震肮。

過程中的參考鏈接如下:

Clion配置Android NDK通過CMake進(jìn)行編譯
解決 CLion 報(bào)紅 NDK 相關(guān)頭文件
cmake使用獨(dú)立工具鏈交叉編譯可在android中運(yùn)行的so包
Android Gradle Plugin 源碼解析之 externalNativeBuild
cmake 交叉編譯
CMake + NDK + CLion針對(duì)CLion開發(fā)工具的配置
可能的另一種配置方案?
Stackoverflow:Integrate CLion and Android NDK
https://cmake.org/cmake/help/v3.7/manual/cmake-toolchains.7.html#cross-compiling-for-android-with-the-ndk

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末留拾,一起剝皮案震驚了整個(gè)濱河市戳晌,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌痴柔,老刑警劉巖躬厌,帶你破解...
    沈念sama閱讀 219,188評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)瑰煎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)疙渣,“玉大人,你說我怎么就攤上這事堆巧⊥螅” “怎么了?”我有些...
    開封第一講書人閱讀 165,562評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵谍肤,是天一觀的道長(zhǎng)啦租。 經(jīng)常有香客問我,道長(zhǎng)荒揣,這世上最難降的妖魔是什么篷角? 我笑而不...
    開封第一講書人閱讀 58,893評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮系任,結(jié)果婚禮上恳蹲,老公的妹妹穿的比我還像新娘。我一直安慰自己俩滥,他們只是感情好嘉蕾,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,917評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著霜旧,像睡著了一般错忱。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,708評(píng)論 1 305
  • 那天以清,我揣著相機(jī)與錄音儿普,去河邊找鬼。 笑死玖媚,一個(gè)胖子當(dāng)著我的面吹牛箕肃,可吹牛的內(nèi)容都是我干的婚脱。 我是一名探鬼主播今魔,決...
    沈念sama閱讀 40,430評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼障贸!你這毒婦竟也來(lái)了错森?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,342評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤篮洁,失蹤者是張志新(化名)和其女友劉穎涩维,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體袁波,經(jīng)...
    沈念sama閱讀 45,801評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡瓦阐,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,976評(píng)論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了篷牌。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片睡蟋。...
    茶點(diǎn)故事閱讀 40,115評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖枷颊,靈堂內(nèi)的尸體忽然破棺而出戳杀,到底是詐尸還是另有隱情,我是刑警寧澤夭苗,帶...
    沈念sama閱讀 35,804評(píng)論 5 346
  • 正文 年R本政府宣布信卡,位于F島的核電站,受9級(jí)特大地震影響题造,放射性物質(zhì)發(fā)生泄漏傍菇。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,458評(píng)論 3 331
  • 文/蒙蒙 一界赔、第九天 我趴在偏房一處隱蔽的房頂上張望桥嗤。 院中可真熱鬧,春花似錦仔蝌、人聲如沸泛领。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)渊鞋。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間锡宋,已是汗流浹背儡湾。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留执俩,地道東北人徐钠。 一個(gè)月前我還...
    沈念sama閱讀 48,365評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像役首,于是被迫代替她去往敵國(guó)和親尝丐。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,055評(píng)論 2 355

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