我用的是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,否则会提示找不到头文件。

更多相关文章

  1. 64位Ubuntu Kylin14编译android内核
  2. Android 使用FTP上传文件
  3. Android将需要的日志文件LOG记录到本地文件夹下指定的文件
  4. android 调用第三方软件打开pdf文件
  5. Android 文件读写的例子

随机推荐

  1. 10天学通Android开发(4)-用户布局与常用
  2. Android(安卓)之 AndroidX 库
  3. Android(安卓)UI开发篇之 ViewPager+九宫
  4. Android(安卓)Studio 构建变体(Build Vari
  5. 无法对jar进行签名,Android(安卓)jarsign
  6. 导入的android项目报错,进入一个类,显示不
  7. Android环境搭建(三)————继续动手
  8. android有序广播
  9. 浅谈Android(安卓)onTouchEvent 与 onInt
  10. Android中Bitmap用法实例分析