首页 > 代码库 > (原)使用android studio ndk开发流程

(原)使用android studio ndk开发流程

先使用android stuido创建一个app工程,创建工程的时候,.gradle目录结构下为2.8目录.(note:2.10目录为后续更新结果出现。)
技术分享
依次修改上述红色方框标注部分内容:
技术分享
1)修改gradle/wrapper/gradle-wrapper.properties目录内容:
技术分享
 
技术分享
技术分享
2)修改工程目录下的build.gradle,主要是修改gradle插件这部分内容:
 
技术分享
 
技术分享
3)修改app/build_gradle内容:
修改前原始内容:
apply plugin: ‘com.android.application‘
 
android {
    compileSdkVersion 24
    buildToolsVersion "24.0.1"
 
    defaultConfig {
        applicationId "com.example.walkera.serialndkdemo"
        minSdkVersion 14
        targetSdkVersion 24
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile(‘proguard-android.txt‘), ‘proguard-rules.pro‘
        }
    }
}
 
dependencies {
    compile fileTree(dir: ‘libs‘, include: [‘*.jar‘])
    testCompile ‘junit:junit:4.12‘
    compile ‘com.android.support:appcompat-v7:24.1.1‘
}
修改后的内容:
 
apply plugin: ‘com.android.model.application‘

model {
android {
compileSdkVersion = 22
buildToolsVersion = "22.0.1"

defaultConfig.with {
applicationId = "com.example.walkera.serialndkdemo"
minSdkVersion.apiLevel = 7
targetSdkVersion.apiLevel = 22
}
}
android.ndk {
moduleName = "serialport"
ldLibs.addAll(["android", "log"])
/*
* Other ndk flags configurable here are
* cppFlags.add("-fno-rtti")
* cppFlags.add("-fno-exceptions")
* ldLibs.addAll(["android", "log"])
* stl = "system"
*/
}
android.buildTypes {
release {
minifyEnabled = false
proguardFiles.add(file(‘proguard-rules.txt‘))
}
}
android.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")
}
}
dependencies {
compile fileTree(dir: ‘libs‘, include: [‘*.jar‘])
compile ‘com.android.support:appcompat-v7:22.1.1‘
}
上面这个是我编译成功的完整的配置文件,我使用的android studio 版本为1.5;
上述过程全部为工程配置内容,对于源码部分的内容:
先是在package目录下,创建一个调用.c文件的jni java文件,这个文件的作用主要是调用由c/c++文件生成的so文件内容,即jni api文件: 技术分享
技术分享
接下来我们可以直接编译整个工程了。(note:上面截图中的jni是在编译后才创建的,在这一步的时候,还没有添加c/c++文件,也没有jni目录)
在编译成功以后,使用AS的终端或者window自带的终端,运行javah -jni  com.example.walkera.serialndkdemo.SerialPortNdk命令。
注意,这个命令是有讲究的:
1)首先是这个命令执行的目录,必须为项目目录下app\build\intermediates\classes\all\debug\目录

2)com.example.walkera.serialndkdemo.SerialPortNdk这个命名,前半部分必须为package名[com.example.walkera.serialndkdemo],后面的SerialPortNdk为调用后续c/c++库的类名。


javah命令运行成功以后,会生成一个.h的头文件。
 
然后我们这个时候src/main/目录下创建一个jni目录,并创建一个c/c++的源文件,这个源文件就是我们需要开发的jni native。
同时将.h头文件拷贝到jni目录下来,根据.h头文件构建并实现自己需要的jni native方法。
 
 
大功告成之后,我进行了整个工程的编译,编译未报错,按照网上的说法,我于是寻找so文件的生成,很多文章介绍是在libs目录下,但我却始终找不到,于是以为我工程有问题,哪一步设置出错了,但编译又正常,奇怪了。后来同事让我运行试一下,结果可以正常运行,这就奇怪了,咋没so生成?于是找了一下,发现:
 
在新的studio版本中,中间库so文件的生成,主要看目录:
技术分享
 
 技术分享
 
 
 
整个大致流程就这样。
 
author:   lihaiping1603
email:     lihaiping1603@aliyun.com
 
出自:http://www.cnblogs.com/lihaiping/p/5829264.html
 
 
 
 
 
 
 
 
 
 
 

(原)使用android studio ndk开发流程