AS中ndk-build方式cpp問題集錦

想用c++代碼在Java中調(diào)用,之前也一直O(jiān)K調(diào)用.so庫(kù)和jni接口雷则,但不知道為什么在AS3.0上一直報(bào)標(biāo)準(zhǔn)庫(kù)找不到仰楚;

還有一個(gè)變動(dòng)就是AS2.2以后ndk編譯默認(rèn)采用cmake了,這就導(dǎo)致以前的Android.mk和Application.mk文件寫法不行了垫挨;但為了方便還是使用了ndk-build方式(這塊官方文檔也是用的cmake跛溉,都沒有ndk-build教程了街夭,哎~)砰碴。沒辦法,之前對(duì)這塊沒經(jīng)驗(yàn)板丽,所以開始了填坑之旅呈枉。

目前還只有一個(gè)問題,以后填了新坑再補(bǔ)充埃碱。

問題:找不到類似string和std等標(biāo)準(zhǔn)庫(kù)函數(shù)

首先要使用ndk-build形式進(jìn)行編譯cpp代碼猖辫,需要修改一下build.gradle文件,現(xiàn)在新建c++項(xiàng)目都是用cmake了砚殿,所以我們?nèi)绻挥?code>cmake要用mdk-build的話啃憎,需要改build.gradle文件;直接貼代碼:

改動(dòng)一:build.gradle

android {
    compileSdkVersion 26
    defaultConfig {
        applicationId "com.zhc.jnidemo"
        minSdkVersion 15
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        externalNativeBuild {
            ndkBuild {
                // Sets optional flags for the C compiler.
                cFlags "-D_EXAMPLE_C_FLAG1", "-D_EXAMPLE_C_FLAG2"

                // Sets a flag to enable format macro constants for the C++ compiler.
                cppFlags "-D__STDC_FORMAT_MACROS"
            }
        }
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    externalNativeBuild {
        ndkBuild {
            path "src/main/jni/Android.mk"
        }
    }
}

改動(dòng)二:Android.mk似炎、Application.mk

這兩個(gè)makefile文件都是在jni目錄下的


image.png

Android.mk如下:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)

LOCAL_MODULE := native
LOCAL_SRC_FILES := native-lib.cpp
LOCAL_LDLIBS    := -llog
include $(BUILD_SHARED_LIBRARY)

Application.mk如下

#APP_OPTIM := release
APP_PLATFORM := android-15
APP_ABI := armeabi-v7a
NDK_TOOLCHAIN_VERSION=4.9
APP_PIE := false
# 重點(diǎn)是這句話:
APP_STL := stlport_static
APP_CFLAGS := -O3 -Wall -pipe \
    -ffast-math \
    -fstrict-aliasing -Werror=strict-aliasing \
    -Wno-psabi -Wa,--noexecstack \
    -DANDROID -DNDEBUG

現(xiàn)在再clean項(xiàng)目辛萍,重新編譯項(xiàng)目,就發(fā)現(xiàn)類似#include <string>找不到的問題沒有了羡藐,希望大家也能解決相同問題贩毕。

問題:找不到C++ 11標(biāo)準(zhǔn)庫(kù)shared_ptr

Android.mk文件中添加APP_CFLAGS := -std=c++11即可支持c++ 11函數(shù),然后在APP_STL :=中指定gnustl_static可以支持最多的函數(shù)庫(kù)仆嗦』越祝可以查看官方文檔:C++ 庫(kù)支持

#APP_OPTIM := release
APP_PLATFORM := android-15
APP_ABI := armeabi-v7a
NDK_TOOLCHAIN_VERSION=4.9
APP_PIE := false
APP_STL := gnustl_static
APP_CFLAGS := -O3 -Wall -pipe \
    -ffast-math \
    -fstrict-aliasing -Werror=strict-aliasing \
    -Wno-psabi -Wa,--noexecstack \
    -DANDROID -DNDEBUG \
    -std=c++11

問題:must be enabled with the -std=c++11 or -std=gnu++11 compiler options

解決辦法是在Android.mk文件中加入支持c++11的flag

LOCAL_CFLAGS += -std=c++11

問題:More than one file was found with OS independent path

Error:Execution failed for task ':app:transformNativeLibsWithMergeJniLibsForDebug'.
More than one file was found with OS independent path 'lib/armeabi-v7a/libnative-lib.so'

刪除build.gradle下面的:

    // 刪除一下代碼
    sourceSets.main {
        jniLibs.srcDir('src/main/libs')
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市欧啤,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌启上,老刑警劉巖邢隧,帶你破解...
    沈念sama閱讀 216,544評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異冈在,居然都是意外死亡倒慧,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)纫谅,“玉大人炫贤,你說(shuō)我怎么就攤上這事「讹酰” “怎么了兰珍?”我有些...
    開封第一講書人閱讀 162,764評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)询吴。 經(jīng)常有香客問我掠河,道長(zhǎng),這世上最難降的妖魔是什么猛计? 我笑而不...
    開封第一講書人閱讀 58,193評(píng)論 1 292
  • 正文 為了忘掉前任唠摹,我火速辦了婚禮,結(jié)果婚禮上奉瘤,老公的妹妹穿的比我還像新娘勾拉。我一直安慰自己,他們只是感情好盗温,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評(píng)論 6 388
  • 文/花漫 我一把揭開白布藕赞。 她就那樣靜靜地躺著,像睡著了一般肌访。 火紅的嫁衣襯著肌膚如雪找默。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,182評(píng)論 1 299
  • 那天吼驶,我揣著相機(jī)與錄音惩激,去河邊找鬼。 笑死蟹演,一個(gè)胖子當(dāng)著我的面吹牛风钻,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播酒请,決...
    沈念sama閱讀 40,063評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼骡技,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了羞反?” 一聲冷哼從身側(cè)響起布朦,我...
    開封第一講書人閱讀 38,917評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎昼窗,沒想到半個(gè)月后是趴,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,329評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡澄惊,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評(píng)論 2 332
  • 正文 我和宋清朗相戀三年唆途,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了富雅。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,722評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡肛搬,死狀恐怖没佑,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情温赔,我是刑警寧澤蛤奢,帶...
    沈念sama閱讀 35,425評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站让腹,受9級(jí)特大地震影響远剩,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜骇窍,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評(píng)論 3 326
  • 文/蒙蒙 一瓜晤、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧腹纳,春花似錦痢掠、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至佃牛,卻和暖如春淹辞,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背俘侠。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工象缀, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人爷速。 一個(gè)月前我還...
    沈念sama閱讀 47,729評(píng)論 2 368
  • 正文 我出身青樓央星,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親惫东。 傳聞我的和親對(duì)象是個(gè)殘疾皇子莉给,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評(píng)論 2 353

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

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,077評(píng)論 25 707
  • 向您的項(xiàng)目添加 C 和 C++ 代碼 本文內(nèi)容 下載 NDK 和構(gòu)建工具 創(chuàng)建支持 C/C++ 的新項(xiàng)目 構(gòu)建和運(yùn)...
    會(huì)飛的大象_閱讀 3,776評(píng)論 0 3
  • 文章摘要1颓遏、 c、c++項(xiàng)目的創(chuàng)建2滞时、添加C叁幢、C++項(xiàng)目依賴庫(kù)4、配置Gradle漂洋,編譯lib so庫(kù) 英文文獻(xiàn) ...
    Android那些事兒閱讀 12,656評(píng)論 0 54
  • 和他遥皂,在一起三個(gè)月,分開兩年刽漂。 兩年后重新開始聯(lián)系演训,仿佛中間過(guò)去的日子都像沒發(fā)生過(guò)一樣,沒經(jīng)歷過(guò)那些徹夜難眠贝咙,渾渾...
    曲北閱讀 204評(píng)論 0 0
  • 里烈 2017-12-30 六時(shí)書 6次 好種子 1样悟、拔除自己傲慢自大的壞種子。并把這個(gè)拔除分享給我的朋友庭猩。以期幫...
    里喻棋閱讀 95評(píng)論 0 0