zoukankan      html  css  js  c++  java
  • 使用Android Studio 1.3 版本号进行NDK开发

    众所周知Android Studio 1.3 版本号新增了NDK支持,能够非常方便的在上面开发C++或者C代码了,但是预览版功能不是非常完好,须要非常多步骤,另一些奇怪的BUG,整了半天最终能够使用Android Studio完美进行NDK开发了.先看下效果图:

    这里写图片描写叙述

    方法:

    一.首先将Android Studio更新到1.3版本号:

    1.检查Android Studio更新.
    这里写图片描写叙述
    有些人可能会遇到问题:自己版本号低于1.3检查更新却提示已经是最新版本号?
    那是由于更新渠道不是Beta渠道,须要先将渠道设置为Beta渠道才干更新到1.3:
    这里写图片描写叙述
    这里写图片描写叙述
    然后又一次检查更新就能够更新到1.3了.

    二.将gradle切换到实验版本号.

    依据Google官方提供的方法改动Gradle文件.(官方说法为測试版本号不完好,须要手动改动Gradle文件以便兼容Gradle实验版,他们会在release版本号中实现程序自己主动改动Gradle)
    Google原文链接:http://tools.android.com/tech-docs/new-build-system/gradle-experimental
    1.将Gradle更新到2.5版本号.
    这里写图片描写叙述
    在这里将GradleVersion改为2.5 点击OK键就会開始自己主动更新Gradle了.
    2.Android NDK r10e ,将NDK更新到这个版本号
    3.BuildTools版本号要求大于19.0.0
    这里写图片描写叙述
    4.红色标注的3个文件是须要手动改动的文件.
    这里写图片描写叙述
    5.改动gradle-wrapper.properties文件内容为例如以下:

    distributionBase=GRADLE_USER_HOME
    distributionPath=wrapper/dists
    zipStoreBase=GRADLE_USER_HOME
    zipStorePath=wrapper/dists
    distributionUrl=https://services.gradle.org/distributions/gradle-2.5-all.zip

    6.改动Project(非Module)下的Gradle文件,将gradle版本号改为实验版本号(红色标注部分):
    (classpath ‘com.android.tools.build:gradle-experimental:0.1.0’)
    这里写图片描写叙述
    7.改动Module下的Gradle文件(新版Gradle语法有了非常大的改变,红色标注为须要改动的部分,注意dependencies在model外面):
    在android{}外面要使用model{}来包含了,全部赋值都变为了=号,新增项变为了+=,buildTypes{},productFlavors{}和sources{}挪到了android{}外面.
    这里写图片描写叙述

    再上一份我的Module的配置:

    apply plugin: 'com.android.model.application'
    model{
        android {
            compileSdkVersion=19
            buildToolsVersion="22.0.0"
            defaultConfig.with {
                applicationId = "com.example.stronghope.jnitest"
                minSdkVersion.apiLevel = 9
                targetSdkVersion.apiLevel = 19
                versionCode = 1
                versionName = "1.0"
            }
            tasks.withType(JavaCompile) {
                //指定编译JDK版本号
                sourceCompatibility = JavaVersion.VERSION_1_7
                targetCompatibility = JavaVersion.VERSION_1_7
            }
        }
        android.ndk {
            moduleName="JniTest"
            ldLibs +="log"
            ldLibs += "z"
            ldLibs += "m"
            abiFilters +="armeabi"
            abiFilters +="armeabi-v7a"
            abiFilters +="x86"
        }
        android.buildTypes {
            release {
    //            isMinifyEnabled = false
    //            proguardFiles += file('proguard-rules.pro')
            }
        }
    }
    dependencies {
    }
    

    实验版Gradle在某些机子上可能会有BUG,假设编译的时候报了例如以下错误,须要在android{}中加入tasks.withType指定较低的JDK编译版本号(1.6或1.7):
    bad class file magic (cafebabe) or version
    最后在local.properties文件里指定NDK文件夹就可以愉快的进行NDK开发啦:
    ndk.dir=”你的NDK文件夹”

    三.NDK开发

    1.配置Gradle中ndk编译參数(仅仅须要在Gradle中配置,就能够全然脱离书写Android.mk和Application.mk文件来编译啦):
    ldLibs项相当于Android.mk中的LOCAL_LDLIBS參数.
    abiFilters相当于Application.mk中的APP_ABI參数.
    这里写图片描写叙述

    2.在Main文件夹下新建JNI文件夹(默认文件夹,如需改动能够在Gradle中指定 jni.srcDirs)
    这里写图片描写叙述
    3.定义JNI java类:
    这里写图片描写叙述

    public class JNI {
    
        static{
            System.loadLibrary("JniTest");
        }
    
        public static native void testLog();
    }

    4.使用javah命令生成头文件(不生成头文件也可,当C++中没有方法实现时,方法名为红色,直接在方法上alt+enter 选择create XXXX 就能够自己主动在C++文件里生成方法,非常方便啊):
    打开cmd,cd到java文件夹下,使用命令:
    javah com.example.stronghope.jnitest.JNI
    生成头文件,将头文件剪切到jni文件夹下.
    自己主动生成方法:
    这里写图片描写叙述

    5.在jni文件夹下新建C++文件:
    JniTest.cpp
    这里写图片描写叙述

    6.引入头文件,编写C++代码:
    这里写图片描写叙述

    7.执行Android项目,在控制台得到例如以下输出:
    这里写图片描写叙述

    好啦一个简单的Jni程序就实现了,使用Android Studio来进行NDK开发真的非常方便!坐等release版本号出来o(∩_∩)o

  • 相关阅读:
    ACM题目————最短路径问题
    ACM题目————已知前序和中序求后序
    ACM题目————数素数
    ACM题目————玩转二叉树
    ACM题目————二叉树的遍历
    ACM题目————士兵杀敌(四)
    ACM题目————士兵杀敌(三)
    ACM题目————星际之门(一)
    ACM第四站————最小生成树(克鲁斯卡尔算法)
    ACM第四站————最小生成树(普里姆算法)
  • 原文地址:https://www.cnblogs.com/mfmdaoyou/p/7098446.html
Copyright © 2011-2022 走看看