Android studio配置NDK问题小结
16lz
2021-01-23
1. Plugin with id 'com.android.model.application' not found
修正最上层的build文件,
// Top-level build file where you can add configuration options common to all sub-projects/modules.buildscript { repositories { jcenter() } dependencies { //classpath 'com.android.tools.build:gradle:2.0.0' classpath 'com.android.tools.build:gradle-experimental:0.7.0-rc1' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files }}....}
同时修改app目录下的build.gradle文件(红色部分),如果 apply plugin:'com.android.model.application';model { android { compileSdkVersion 23 buildToolsVersion "23.0.3" defaultConfig { applicationId "com.example.king.mytest" minSdkVersion.apiLevel 15 targetSdkVersion.apiLevel 23 versionCode 1 versionName "1.0" } buildTypes { release { minifyEnabled false // proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' proguardFiles.add(file('proguard-rules.pro')) } } ndk { moduleName = "NdkSample" cppFlags.add("-std=c++11") cppFlags.add("-fexceptions") abiFilters.add("armeabi") abiFilters.add("x86") ldLibs.add("android") ldLibs.add("log") stl = "gnustl_shared" } productFlavors { create("arm") { ndk.abiFilters.add("armeabi") } create("arm7") { ndk.abiFilters.add("armeabi-v7a") } create("arm8") { ndk.abiFilters.add("arm64-v8a") } create("x86") { ndk.abiFilters.add("x86") } create("x86-64") { ndk.abiFilters.add("x86_64") } create("mips") { ndk.abiFilters.add("mips") } create("mips-64") { ndk.abiFilters.add("mips64") } // To include all cpu architectures, leaves abiFilters empty //create("all") } compileOptions.with { sourceCompatibility JavaVersion.VERSION_1_7 targetCompatibility JavaVersion.VERSION_1_7 } }//end android}dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) //testCompile 'junit:junit:4.12' compile 'com.android.support:appcompat-v7:23.3.0'}
2. 支持C++11,在app的build文件内修改
ndk { moduleName = "NdkSample" cppFlags.add("-std=c++11") cppFlags.add("-fexceptions") abiFilters.add("armeabi") abiFilters.add("x86") ldLibs.add("android") ldLibs.add("log") stl = "gnustl_shared" }
其中有个比较有意思的是,也是让我搞了大半天的问题是加入这些配置项的写法问题 有类似 cppFlags "-std=c++11"
也有类似cppFlags +="-std=c++11"方式,我最后编译通过是使用了add方式
网上有说在gradleWrapper中如果使用的是2.5,cppFlags 的添加则使用 += 的方式,否则需要使用.add的方式
(我的是gradle-2.10-all,可在gradle/wrapper/gradle-wrapper.properties文件中查看)
哪位小伙伴如果清楚为什么会有这么多配置方式请指点明路呀,多谢!!!
3. The currently selected variant "arm7-debug" uses split APKs, but none of the 1 split apks are compatible with the current device with density "480" and ABIs "x86".
最开始以为需要在 productFlavors 内增加x86的支持,结果增加后仍然提示此问题。
最后在NDK中通过增加 abiFilters.add("x86") 的方式解决
4. 同时生成多个so文件
由于对gradle配置不熟悉的原因,导致很多问题绕了好多圈子。例如想要生成多个so的方法如下,即在ndk中配置多个moduleName
ndk { moduleName = "NdkSample" cppFlags.add("-std=c++11") cppFlags.add("-fexceptions") abiFilters.add("armeabi") abiFilters.add("x86") ldLibs.add("android") ldLibs.add("log") //stl = "gnustl_shared" //c code moduleName = 'hello-jni' toolchain = 'clang' CFlags.addAll(['-Wall']) }
更多相关文章
- android 文件目录权限
- Android跳转WIFI界面的四种方式
- Android文件操作IO技术
- Android将Uri转化为文件路径的方法
- 解决TabLayout+viewpager 滑动切换时 布局文件不是从头显示
- android之sax解析xml文件
- [Android]关于filed 遍历资源文件的排序问题