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