AndroidStudio 2.3 NDK开发项目构建流程

1 篇文章 0 订阅
  1. 新建一个普通的AndroidStudio工程
  2. 修改Project下的build.gradle :

    用:classpath ‘com.android.tools.build:gradle-experimental:0.9.1’
    替换原来的:classpath ‘com.android.tools.build:gradle:2.3.0’
    代码如下:

   buildscript {
    repositories {
        jcenter()
    }
    dependencies {
       // classpath 'com.android.tools.build:gradle:2.3.0'
           classpath 'com.android.tools.build:gradle-experimental:0.9.1'
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
} 

3.修改app下的build.gradle
用apply plugin:’com.android.model.application’
替换原来的apply plugin: ‘com.android.application’

再原来的Android外面添加model
再Android内部添加ndk{}
model{
Android{
ndk{
}
}
}

minSdkVersion 19->minSdkVersion.apiLevel 19或者minSdkVersion =“19”
targetSdkVersion 25->targetSdkVersion.apiLevel 25 或者 targetSdkVersion =“25”
proguardFiles getDefaultProguardFile(‘proguard-android.txt’), ‘proguard-rules.pro’->
proguardFiles.add(file(‘proguard-android.txt’))//混淆

//apply plugin: 'com.android.application'
apply plugin:'com.android.model.application'
model{


    android {
        compileSdkVersion 25
        buildToolsVersion "25.0.0"
        defaultConfig {
            applicationId "com.phone.zhimeng.phone"
            minSdkVersion.apiLevel 19// minSdkVersion 19
            targetSdkVersion.apiLevel 25
            versionCode 1
            versionName "1.0"
            testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        }
        buildTypes {
            release {
                minifyEnabled false
                //proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'//混淆器
                proguardFiles.add(file('proguard-android.txt'))
            }
        }
        ndk{
            moduleName"phoneModel"//so库的名字
            toolchain = 'clang'    //工具链
            CFlags.add('-std=c99')
            // 添加依赖库
            ldLibs.addAll(['android','OpenSLES', 'log'])
            // 生成不同abi体系的so库
            // abiFilters.addAll(['armeabi','armeabi-v7a','arm64-v8a','x86','x86_64'])

            abiFilters.addAll(['armeabi', 'armeabi-v7a', 'arm64-v8a',
                               'x86', 'x86_64',
                               'mips', 'mips64'])
        }
    }
}

4.再gradle.properties中添加:

# android.useDeprecatedNdk=true

5添加项目的ndk路径,
file->projectStructure->sdk location 配置ndk路径,配置完成后查看local.properties中是否有ndk路径

6.gradel 最好使用3.3以上的
distributionUrl=https://services.gradle.org/distributions/gradle-3.3-all.zip

7.新建java类编写native方法

public class testJni {



    static {
        System.loadLibrary("phoneModel");
    }
    public native String getStingFromC();

}

8.javah命令生成生成头文件:

下面是我在Terminal中生成头文件的方法:
首先定位到main目录下:
-d jni :生成的头文件放到该main下面的jni目录里
-classpath ./java 到该目录下去找 com.phone.zhimeng.phone.JNIUtil

D:\workSpace\Phone>cd app/src/main

D:\workSpace\Phone\app\src\main>javah -d jni -classpath ./java com.phone.zhimeng.phone.JNIUtil

D:\workSpace\Phone\app\src\main>

生成的.so动态库所在的目录D:\workSpace\Phone\app\build\intermediates\binaries\debug\lib
刚开始我一直到不到我的动态库位置,以为自己搞错了,找了半天才发现在这里

经过以上步骤,我们基本上完成了ndk开发的准备工作,下面可以开始撸代码了,
还有一点需要注意:
native生成c方法需要添加依赖库
我们在gradle中添加

 compile 'com.android.tools.build:gradle-experimental:0.7.0'

但是Sync now 会报错,我们直接把这行代码注释掉,这样可以直接在native方法上

Alter+Enter 快捷键生成c代码,我们每次重启as的时候,都需要把这行代码编译一次,然后注释,就可以放心使用快捷键了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值