android studio ndk开发遇到的问题
来源:互联网 发布:福建广电网络电视客服 编辑:程序博客网 时间:2024/05/17 03:07
我用的是android studio 1.5的版本,所以gradle配置相比旧版本有了不少变化。可参考如下文档
http://tools.android.com/tech-docs/new-build-system/gradle-experimental
首先贴出我的完整gradle配置,让大家有个直观认识
apply plugin: 'com.android.model.application'model{ android { compileSdkVersion = 19 buildToolsVersion = "22.0.1" defaultConfig.with { applicationId = "com.example.testhook" minSdkVersion.apiLevel = 10 targetSdkVersion.apiLevel = 19 versionCode = 1 versionName = "1.0" } } android.packagingOptions { pickFirst 'lib/armeabi-v7a/libtest.so' pickFirst 'lib/x86/libtest.so' } android.buildTypes { release { minifyEnabled = false proguardFiles += file('proguard-rules.pro') ndk.with { CFlags += ["-O3"] cppFlags += ["-DNDEBUG", "-O3"] } } } android.ndk { moduleName = "test" toolchain = "gcc" toolchainVersion = "4.9" cppFlags += ["-DPLATFORM_SDK_VERSION=14", "-DHAVE_LITTLE_ENDIAN", "-D__ARM_ARCH_7__"] ldLibs += ["cutils","utils", "binder", "android_runtime", "dvm", "stlport", "dl"] abiFilters += ["x86"] abiFilters += ["armeabi-v7a"] def android_branch = "android-2.3.3_r1.1"; ldFlags += "-L${getRootDir()}/dexposed-AOSP/${android_branch}/jniLibs/x86".toString() ldFlags += "-L${getRootDir()}/dexposed-AOSP/${android_branch}/jniLibs/armeabi-v7a".toString() Properties properties = new Properties() properties.load(project.rootProject.file('local.properties').newDataInputStream()) def ndkDir = properties.getProperty('ndk.dir') cppFlags += "-I${ndkDir}/sources/cxx-stl/stlport/stlport".toString() cppFlags += "-I${getRootDir()}/dexposed-AOSP/${android_branch}/include/dalvik".toString() cppFlags += "-I${getRootDir()}/dexposed-AOSP/${android_branch}/include/dalvik/vm".toString() cppFlags += "-I${getRootDir()}/dexposed-AOSP/${android_branch}/include/external/stlport/stlport".toString() cppFlags += "-I${getRootDir()}/dexposed-AOSP/${android_branch}/include/bionic".toString() cppFlags += "-I${getRootDir()}/dexposed-AOSP/${android_branch}/include/bionic/libstdc++/include".toString() cppFlags += "-I${getRootDir()}/dexposed-AOSP/${android_branch}/include/system/core/include".toString() cppFlags += "-I${getRootDir()}/dexposed-AOSP/${android_branch}/include/frameworks/native/include".toString() cppFlags += "-I${getRootDir()}/dexposed-AOSP/${android_branch}/include/frameworks/base/include".toString() cppFlags += "-I${getRootDir()}/dexposed-AOSP/${android_branch}/include/libnativehelper/include".toString() }}dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile files('libs/commons-lang3-3.4.jar')}
有几点需要注意:
一、如果这是个library,则第一行应改为
apply plugin: ‘com.android.model.library’
二、框架整体的build.gradle中要改成如下
classpath ‘com.android.tools.build:gradle-experimental:0.2.0’
三、gradle-wrapper.properties里要改成gradle-2.5,如下
distributionUrl=https://services.gradle.org/distributions/gradle-2.5-all.zip
四、编译cpp时提示以下错误,而在c中就没有这个问题
java.lang.UnsatisfiedLinkError: Native method not found
解决办法,在函数前面加上extern “C”,如下
extern "C" JNIEXPORT JNICALL jstringJava_com_example_testhook_Tester_getName(JNIEnv *env, jclass object) { return env->NewStringUTF("hello world!");}
五、接下来,最重要的是,如果我需要引用到android内核框架中的某些功能,该怎么做呢?
首先要引用android内核中对应模块的so文件,然后包含其头文件并一起编译。而要得到内核模块的so文件,需要先下载并编译android内核。而引用so和头文件都是在gradle中配置的,分别对应的是ldFlags和cppFlags。注意,如果是C文件,则为CFlags,否则会提示找不到头文件。
- android studio ndk开发遇到的问题
- NDK开发——Android Studio中开发NDK遇到的错误问题与解决方案汇总
- Android NDK 开发自己遇到的问题
- android开发NDK遇到的问题杂谈
- Android Studio NDK开发过程中遇到的问题与解决(一)
- Android studio 调试NDK C++ 代码,遇到的问题
- 使用Android Studio开发遇到的问题
- Android Studio开发遇到的问题
- android studio 开发中遇到的问题
- Android NDK 遇到的问题
- android studio的ndk开发
- Android Studio使用ndk'遇到的错误
- Android——NDK开发配置遇到的问题
- android studio ndk 开发以及问题
- Android开发遇到的细节问题整理(android studio)
- Android 开发使用Android studio 遇到的问题汇总
- NDK开发中遇到的一些问题。
- ndk开发中遇到的问题
- Linux下执行定时任务
- 【android】发送短息和拨打电话功能
- LeetCode题解:Binary Tree Paths
- this的用法
- Leetcode 第268题Missing Number
- android studio ndk开发遇到的问题
- [u-boot] Net: smc911x: Invalid chip endian 0xc691c691 解决方案
- ucosIII 互斥信号量、内嵌信号量
- tomcat脚本启动正常,服务无法启动,特定错误代码1
- [Medical Image Process] 3.4 Morphology Application—Watershed Algorithm 分水岭算法
- Mysql常用命令
- C++类型转换
- JDBC连接MySql数据库
- 程序Unite4