zoukankan      html  css  js  c++  java
  • (原)使用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)首先是这个命令执行的目录,必须为项目目录下appuildintermediatesclassesalldebug目录
    
    

    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
     
     
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    easyExcel入门
    UML-从需求到设计--迭代进化
    UML-操作契约总结
    102. Binary Tree Level Order Traversal
    98. Validate Binary Search Tree
    95. Unique Binary Search Trees II
    96. Unique Binary Search Trees
    94. Binary Tree Inorder Traversal
    84. Largest Rectangle in Histogram
    92. Reverse Linked List II
  • 原文地址:https://www.cnblogs.com/lihaiping/p/5829264.html
Copyright © 2011-2022 走看看