• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > Android studio1.5.1 NDK配置开发

Android studio1.5.1 NDK配置开发

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了android studio1.5.1,我的世界1.5.1下载,我的世界1.5.1,小伙伴1.5.1下载,我的世界1.5.1mod等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

Android studio1.5.1 NDK配置开发


注意:因为使用的工具和SDK版本不同,过程可能就不同,我把我试验过的几种情况都会说下。

一、工具和SDK版本:Android studio1.51, SDK版本:23 (最新的6.0)

二、工具和SDK版本:Android studio1.51, SDK版本:21

在这两种情况之前你必须做好一件事:安装NDK。过程如下:

在setting 中appearance -> Android SDK -> SDK Tools -> Android NDk 打钩,然后点击apply -> OK. 如下图:

自动安装好DN卡之后,会在local.properties 中有显示:如下图

\

到此ND就安装完成了,那么接下来就是关键时刻了,先来看看情况一的具体过程:

1. 新建一个工程,就是一个简单的空白工程,功能也没有

2. 定义native 接口 和 加载即将生成的库。就几行代码,代码如下:

  • packagezhanghuan.cn.jnitest1;
  • importandroid.support.v7.app.AppCompatActivity;importandroid.os.Bundle;
  • importandroid.widget.TextView;
  • publicclassMainActivityextendsAppCompatActivity{static{
  • System.loadLibrary("JniTest");}
  • publicnativeStringgetStringFromNative();
  • @Override
  • protectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);
  • setContentView(R.layout.activity_main);
  • TextViewtextView=(TextView)findViewById(R.id.text);textView.setText(getStringFromNative());//调用接口
  • }}
    3. 写好接口之后接下来就是关键了,点击 Build -> Make Project, 如下图:

    \

    然后在底部的状态栏Messages 中查看Build的情况,必须是0错误才行,如下图:

    \

    4. Build 成功之后,就在Terminal 命令行中开始生成.h 文件

    命令为:

  • javah-djni-classpathD:\tools\android-sdk\platforms\android-23\android.jar;D:\MyProject\AndroidStudio\JniTest1\app\src\main\javazhanghuan.cn.jnitest1.MainActivity

    就是这一步卡了我好久,之前找的教程每个的命令都是这样的:

  • javah-djni-classpathD:\tools\android-sdk\platforms\android.jar;..\..\build\intermediates\classes\debugzhanghuan.cn.jnitest1.MainActivity

    结果报错 “找不到android.support.v7.app.AppCompatActivity的类文件” 如下图:

    \

     

    怎么试都不成功,最后发现除非不用V7特性,不继承AppCompatActivity 类,继承成普通的Activity就没事,这其中的差异我在后面会说的。但是我想如果在AppCompatActivity不应该不行的,虽然这是新特性,但它肯定能包容以前的。既然在debug 这中找不到,那我就直接在main 中指定类文件,不在debug中找了,结果让我发现居然成功了!当时心里呼了好长的一口气。成功的命令就是上面的第一个命令,直接指向类文件,然后生成了.h 文件,但是这个.h 文件和用debug 中的类文件生成的.h 文件是有区别的,这个区别待会在后面把.h 文件一对比就知道了。

    回归正题,命令成功之后,在main 目录下回生成jni目录,然后还有一个.h 文件:如下图:

    \

     

    我贴下.h 文件的代码:

  • /*DONOTEDITTHISFILE-itismachinegenerated*/#include
  • /*Headerforclasszhanghuan_cn_jnitest1_MainActivity*/
  • #ifndef_Included_zhanghuan_cn_jnitest1_MainActivity#define_Included_zhanghuan_cn_jnitest1_MainActivity
  • #ifdef__cplusplusextern"C"{
  • #endif/*
  • *Class:zhanghuan_cn_jnitest1_MainActivity*Method:getStringFromNative
  • *Signature:()Ljava/lang/String;*/
  • JNIEXPORTjstringJNICALLJava_zhanghuan_cn_jnitest1_MainActivity_getStringFromNative(JNIEnv*,jobject);
  • #ifdef__cplusplus
  • }#endif
  • #endif 5. 复制.h 文件放在相同的目录下,改个名称(名字任意)为my.c , 代码如下:
  • #include"zhanghuan_cn_jnitest1_MainActivity.h"
  • JNIEXPORTjstringJNICALLJava_zhanghuan_cn_jnitest1_MainActivity_getStringFromNative(JNIEnv*env,jobjectjob){
  • return(*env)->NewStringUTF(env,"HelloformJNI!");}
    但是这时你会发现有错误,NDK support is an experimental feature and all use cases are not yet supported, 如下图:

    \

    解决方法是在gradle.properties 文件中加入一句代码:

  • android.useDeprecatedNdk=true

     

    6. 在app 中的build.gradle 文件的defaultConfig 中加入NDK配置,指定生成的so文件名和适配的arm 类型. 加入代码:
  • ndk{moduleName"JniTest"
  • abiFilters"armeabi","armeabi-v7a","x86"} 我的build.gradle 文件代码如下:
  • applyplugin:'com.android.application'
  • android{compileSdkVersion23
  • buildToolsVersion"23.0.2"
  • defaultConfig{applicationId"zhanghuan.cn.jnitest1"
  • minSdkVersion11targetSdkVersion23
  • versionCode1versionName"1.0"
  • ndk{
  • moduleName"JniTest"abiFilters"armeabi","armeabi-v7a","x86"
  • }}
  • buildTypes{release{
  • minifyEnabledfalseproguardFilesgetDefaultProguardFile('proguard-android.txt'),'proguard-rules.pro'
  • }}
  • }
  • dependencies{compilefileTree(dir:'libs',include:['*.jar'])
  • testCompile'junit:junit:4.12'compile'com.android.support:appcompat-v7:23.2.1'
  • }
    到此,基本步骤就全部完成了,然后就直接运行一下,看下效果,效果图如下:

    \


    成功完成!如果有兴趣可以看下下面的第二种情况。

     

    好了,接下来我们就看看第二种情况:不使用V7。

    1. 前面的几步步骤和第一种情况是一样的,到第4步的命令行开始有重要的差别, 我就直接跳到命令行那步了,命令如下:

  • javah-djni-classpathD:\tools\android-sdk\platforms\android-21\android.jar;D:\MyProject\AndroidStudio\JinTest\app\build\intermediates\classes\debugzhanghuan.cn.jintest.MainActivity

    注意如果出错要写绝对的地址,网上的教程都是什么”..\..\buidl\...“这种写法,但是我一次都没成功,折腾了很久都没成功,如果你成功了就请告诉我。

    最后生成的.h 文件代码如下:

  • /*DONOTEDITTHISFILE-itismachinegenerated*/#include
  • /*Headerforclasszhanghuan_cn_jintest_MainActivity*/
  • #ifndef_Included_zhanghuan_cn_jintest_MainActivity#define_Included_zhanghuan_cn_jintest_MainActivity
  • #ifdef__cplusplusextern"C"{
  • #endif#undefzhanghuan_cn_jintest_MainActivity_BIND_ABOVE_CLIENT
  • #definezhanghuan_cn_jintest_MainActivity_BIND_ABOVE_CLIENT8L#undefzhanghuan_cn_jintest_MainActivity_BIND_ADJUST_WITH_ACTIVITY
  • #definezhanghuan_cn_jintest_MainActivity_BIND_ADJUST_WITH_ACTIVITY128L#undefzhanghuan_cn_jintest_MainActivity_BIND_ALLOW_OOM_MANAGEMENT
  • #definezhanghuan_cn_jintest_MainActivity_BIND_ALLOW_OOM_MANAGEMENT16L#undefzhanghuan_cn_jintest_MainActivity_BIND_AUTO_CREATE
  • #definezhanghuan_cn_jintest_MainActivity_BIND_AUTO_CREATE1L#undefzhanghuan_cn_jintest_MainActivity_BIND_DEBUG_UNBIND
  • #definezhanghuan_cn_jintest_MainActivity_BIND_DEBUG_UNBIND2L#undefzhanghuan_cn_jintest_MainActivity_BIND_IMPORTANT
  • #definezhanghuan_cn_jintest_MainActivity_BIND_IMPORTANT64L#undefzhanghuan_cn_jintest_MainActivity_BIND_NOT_FOREGROUND
  • #definezhanghuan_cn_jintest_MainActivity
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Android Studio 1.5.1 JNI 编程
  • Android studio1.5.1 NDK配置开发

相关文章

  • 2017-05-26安卓当下最流行的吸顶效果的实现(转),安卓当下
  • 2017-05-26如何正确配置Nginx+PHP
  • 2017-05-26一次奇怪的MySQL复制故障
  • 2017-05-26Android的Message Pool是什么——源码角度分析,androidpool
  • 2017-05-26在Android Studio 配置OpenCV 3.1
  • 2017-05-26Android Studio-—使用OpenCV的配置方法和demo以及开发过程中遇到的问题解决,studio-opencv
  • 2017-05-222.4.2 Date & Time组件(上)
  • 2017-05-26Android 自定义TextView实现文本内容自动调整字体大小以适应TextView的大小,androidtextview
  • 2017-05-26Kotlin操作符重载:把标准操作加入到任何类中(KAD 17),kotlinkad
  • 2017-05-26android开发游记:meterial design 5.0 新增控件介绍及使用方法

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • android工程师这么面试就能拿高薪,android高薪
    • 浅谈Kotlin(三):类,浅谈kotlin
    • Android--判断是否连接成功了指定wifi,android--wifi
    • Android中Activity处理返回结果的实现方式,androidactivity
    • activity的横屏和竖屏设置,activity
    • dspam运维记录
    • linux设备驱动程序之时钟管理(4)----原来是孩儿他爹娘
    • 2.5.2 GridView(网格视图)的基本使用
    • [android] 手机卫士绑定sim卡,androidsim
    • 用设计精美的阅读指读应用项目源码,设计精美源码

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有