Android環境:
compileSdkVersion 26
defaultConfig {
applicationId "com.example.chijing.myapplication"
//minSdkVersion 26
//targetSdkVersion 27
minSdkVersion 26
targetSdkVersion 26
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
externalNativeBuild {
cmake {
cppFlags "-frtti", "-fexceptions", "-std=c++11", "-Os", "-s", "-ffunction-sections", "-fdata-sections"
//arguments "-DANDROID_STL=c++_shared" ,"-ARCH=arm", "-ABI_TYPE=armeabi-v7a"
ndk {
//moduleName "jary" //生成的so名字
abiFilters "armeabi-v7a" //輸出指定三種abi體系結構下的so庫。
stl "c++_shared"
}
}
}
signingConfig signingConfigs.config
}
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
// debug
// {
// jniDebuggable = true
// minifyEnabled = false
// proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
//
// }
debug {
signingConfig signingConfigs.config
}
}
sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}
externalNativeBuild {
cmake {
path 'D:/source/kernel/CMakeLists.txt'
}
}
c++ 用的c++ 11, 無其他特殊環境,
當使用std::vector<T>::emplace_back 的時候, T不能有copy構造函數, 否則將無法編譯成功, 3種方案:
1: 註釋掉T的拷貝構造函數
2: 不調用emplace_back, 直接實例化T對象, 然後使用push_back(T)
3: 使用ifdef 區分Android 和非Android代碼 , 分別調用push_back和emplace_back