android studio2.1.2中的jni调用

Android Studio开发JNI示例 JNI和NDK介绍 JNI(Java Native Interface),是方便Java调用C、C++等Native代码所封装的一层接口,相当于一座桥梁。通过JNI可以操作一些Java无法完成的与系统相关的特性,尤其在图像和视频处理中大量用到。 NDK(Native Development Kit)是Google提供的一套工具,其中一个特性是提供了交叉编译,即C或者C++不是跨平台的,但通过N... 阅读详情
最近在as上捣鼓了一下jni,参考别人的做法,全都是getStringFromC这个案例。看似挺简单却还是遇见一些奇葩困难。

环境: xp 32位+as2.1.2+ndk r10
项目demo记录:http://download.youkuaiyun.com/detail/kernel_/9594810
demo可以实现jni的调用以及控制台打印log
as莫名其妙 报错。主要原因是开发环境影响,如下:

1.

make.exe: *** No rule to make target 
Error:Execution failed for task ':app:compileDebugNdk'.
> com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'D:\ndk\android-ndk32-r10-windows-x86\android-ndk-r10\ndk-build.cmd'' finished with non-zero exit value 2

D:\MyApplication\app\build\intermediates\ndk\debug\obj/local/armeabi/objs/NdkJniDemo/D_\MyApplication\app\src\main\jni', needed by `D:\MyApplication\app\build\intermediates\ndk\debug\obj/local/armeabi/objs/NdkJniDemo/D_\MyApplication\app\src\main\jni\cc.o'.  Stop.

据说是android studio的bug
解决方法:在jni文件夹添加一个.c或者.cpp文件

2.

这里写图片描述
ndk版本
解决方法:
android-ndk-r9d-windows-x86
改为
android-ndk32-r10-windows-x86

gradle配置:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.3"

    defaultConfig {
        applicationId "com.example.administrator.myapplication"
        minSdkVersion 15
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"

        ndk {
            moduleName "NdkTest"                       //生成的so名字
            abiFilters "armeabi", "armeabi-v7a", "x86" //输出指定三种abi体系结构下的so库。}
            ldLibs "log"
        }


    }
    sourceSets {
        main {
            jni.srcDirs = ['src/main/jni']//jni源码时使用
            //jniLibs.srcDirs = ['libs']  //so库时使用
        }
    }

    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:23.4.0'
}

生成的so库:在app\build\intermediates\ndk……
这里写图片描述

拷贝进libs目录,引用方法:gradle添加

sourceSets {
        main {
            jni.srcDirs = ['src/main/jni']//jni源码时使用
            //jniLibs.srcDirs = ['libs']  //so库时使用
             }
    }

log打印:gradle添加ldLibs “log”

 ndk {
            moduleName "NdkTest"                       //生成的so名字
            abiFilters "armeabi", "armeabi-v7a", "x86" //输出指定三种abi体系结构下的so库。}
            ldLibs "log"
        }

C代码使用log:

#include <android/log.h>
#include "com_example_administrator_myapplication_JniUtils.h"


#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR, "DEBUG", __VA_ARGS__)
/*
* Class:     Java_com_wobiancao_ndkjnidemo_ndk_JniUtils
* Method:    getStringFormC
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_com_example_administrator_myapplication_JniUtils_getStringFormC
        (JNIEnv *env, jobject obj){
    /**
     *  __android_log_print(ANDROID_LOG_DEBUG,LOG_TAG,“***”) // LOG类型:debug
  __android_log_print(ANDROID_LOG_INFO,LOG_TAG,“***”) // LOG类型:info
 __android_log_print(ANDROID_LOG_WARN,LOG_TAG,“***”) // LOG类型:warning
 __android_log_print(ANDROID_LOG_ERROR,LOG_TAG,“***”) // LOG类型:error
  __android_log_print(ANDROID_LOG_FATAL,LOG_TAG,“***”) // LOG类型:Verbose???
     */
    LOGE("定义的错误信息打印");
    __android_log_print(ANDROID_LOG_ERROR,"---打印--","ANDROID_LOG_ERROR");
    __android_log_print(ANDROID_LOG_INFO, "---打印---","ANDROID_LOG_INFO");
    return (*env)->NewStringUTF(env,"from c");}

输出效果:
这里写图片描述

Android Studio开发JNI工程 使用Android Sutdio创建一个新的工程后,接下来记录创建NDK工程的基本步骤。本文将达到:1. 创建NDK工程2. 在JNI中输出Log语句3. 指定编译的so库的abi版本4. 解决在创建NDK工程中的问题Step: 1. 添加native接口注意写好native接口和System.loadLibrary()即可了,并无特别之处。P.S:onCreate()中对R.id.txt执行se 阅读详情

相关推荐

Android studio 简单方便的使用JNI调用c语言中的方法

今天尝试了在Android studio中调用JNI,历尽千辛万苦终于成功了。不说废话,只谈步骤: 第一步:在gradle.properties文件中添加  Android.useDeprecatedNdk = true 第二步:将鼠标光标移到你的项目上按f4,选中SDK Location,这一步的是添加NDK,一般来说在最下面的NDK location是没有的,点击旁边的下载

小李的博客 6227

android studio jni入门

---恢复内容开始--- 假设你的配置信息和我一样:android studio 版本 2.1.2sdk\build-tools 版本23.0.3ndk 版本 android-ndk-r10 -----...

weixin_30426065的博客 158

android studio 3.2 使用jni

在android studio 3.2中本人调用jni不使用nkd-build这个方式而是采用cmake的方式。 下面是主要内容: jni文件的建立 jni的基本实现 jni传参 环境配置: 在SDK Tools中要添加CMake LLDB NDK点击OK,等待下载完成,下载完成后,重启Android Studio 开始新建JNI项目 直接新建一个项目,注意在“Include...

飞鸟慕鱼的博客 2128

在android studio 2.1 实现简单的ndk

在android studio 2.1 实现简单的ndk我从这里参考的,然后自己琢磨好久才自己实现了。第一次玩这个!!! http://blog.csdn.net/yanbober/article/details/453090491, 在Settings->中先下载android ndk 2,创建NdkJniUtils类package com.example.edu.ndktest;/**

游戏人日常 5066

Android Studio NDK开发案例一 JNI开发入门

        最近在做Android的项目,用到了JNI,现将NDK的开发流程和方法整理出来,希望能够让刚接触的小伙伴们少走一些弯路。 NDK         Native Development Kit(NDK)是一系列工具的集合。它提供了一系列的工具,帮助开发者快速开发C/C++的动态库,并能自动将so和java一起打包成apk。 JNI         Java Native In...

他乡&学子 3248

Android Studio + NDK JNI调用openCV图像处理

本文介绍如何通过android studio通过jni调用openCV,不使用Opencv Manager,使用静态编译openCV的方式,生成单独的一个so文件。 可先看上篇文章http://blog.csdn.net/cheng20150809/article/details/51348420,AndroidStudio基本的JNI编程。 1、新建一个空的Activity工程,添加Add-

cheng20150809的博客 5899

Android studio2.2+,配置NDK,JNI开发

一,Android studio2.2+以上版本 2.2以上版本默认是配置了NDK的。在你android SDK目录下的ndk-bundle下。 在我们项目下的local.properties下已经配置好NDK路径了,如下(我的路径) ndk.dir=C:\forwork\java\Android\sdk\ndk-bundle sdk.dir=C:\forwork\java\Android...

wangxp423的博客 522

android studio使用JNI

这提供了一个在Java平台上调用C/C++的一种途径,反之亦然。而且编译后生成的二进制代码只能在本地操作系统环境下运行,因为不同的操作系统环境,有自己的本地库和CPU指令集,而且各个平台对标准C/C++的规范和标准库函数实现方式也有所区别。与其它类似接口Microsoft的原始本地接口等相比,JNI的主要竞争优势在于:它在设计之初就确保了二进制的兼容性,JNI编写的应用程序兼容性以及其再某些具体平台上的Java虚拟机兼容性(当谈及JNI时,这里并不特比针对Davik虚拟机,JNI适用于所有JVM虚拟机)。

983

[安卓开发笔记二]android Studio通过jni调用C++代码

[安卓开发笔记二]android Studio通过jni调用C++代码 自己需要用到android studio开发安卓项目,为了效率需要用jni来调用C++底层代码,网上关于这方面的资源十分匮乏,自己踩了很多坑,总算明白android studio是如何进行jni的调用,记录与此,贡献自己的一点力量,让后来人少踩坑 1、开发ide:操作系统win7或者mac均可,这点没有关系哈 androi

u012341163的博客 1万+

android studio 调用jni,实现Java调用C语言程序

思路可能有些问题,但是方法是正确的,如有遇到不通的地方,可以留言提问。 1. 新建工程。新建工程的时候,按照普通新建工程的方法就可以。 2.新建的工程切换到Project视图下,在main文件夹新建JNI Folder,也可以新建一个Project. 3. 在MainActivity中新建一个native方法。 例如: public native String 方法名A(); public

三石的专栏 3587

简单的JNI调用

准备工作:NKD环境搭建 使用Android studio 打开Project structure,在设置页面找到SDK location,可以设置NDK的路径,如果目前还没有NDK开发包,studio会提示你下载,下载完成后设置路径即可 检查local.properties文件里面有没有NDK路径: 开始创建JNI接口 新建一个类myJNI,然后添加JNI接口定义,如下所示,...

xj531的博客 5740

Android Studio开发jni实例详解 (调用C代码实例)

一、配置NDK环境 第一步:在AndroidStudio中配置ndk环境 需要下载ndk包,在AndroidStudio中File-->ProjectStructure-->SDK Location中配置"Android NDK Location",如下: 下载安装完成后build工程; 第二步:配置环境变量 在计算机属性里面配置环境变量,变量地址是And

u013210543的博客 1万+

Android Studio 2.2中JNI的实践指南

Java Native Interface (JNI) 是一种编程框架,它使Java代码和其他语言(如C/C++)编写的代码之间能够相互调用。JNI在Android开发中尤为关键,因为它是实现Java与原生代码交互的桥梁,使得Java虚拟机(JVM)能与本地应用程序接口(API)交互。在Java中,native关键字用于声明一个方法,表明这个方法是一个本地方法,它将由Java以外的其他语言实现,通常是C或C++。本地方法允许Java代码与底层平台特定的代码进行交互。

weixin_35414484的博客 1097

Android studio使用JAVA与JNI调用OpenCV

Android studio使用JNI调用OpenCV 1.准备材料 **1.在这里下载OpenCV-android-sdk ** 下载解压后 2.新建Android Studio工程 3.将在工程目录下的 app/src/main 下面新建两个文件夹,分别是cpp和jniLibs,如果有就不用新建。 把OpenCV-android-sdk\sdk\native\libs中内容拷贝到jniLi...

学习小白 3174

Android-在AndroidStudio2.3.2下JNI开发的详细步骤

在AndroidStudio2.3.2下JNI开发的详细步骤

GitHub与GitLab中的Fork操作:从个人仓库到团队协作的完整指南

本文详细介绍了GitHub与GitLab中的Fork操作,从个人仓库到团队协作的完整指南。通过Fork操作,开发者可以在权限隔离的环境下自由实验,并通过合并请求机制保证代码质量。文章涵盖了Fork的具体步骤、本地开发环境配置、代码同步方法以及高级协作技巧,帮助团队高效管理代码仓库。

weixin_28829325的博客 306

安卓中的jni调用

背景 1、JNI: Java Native Interface。是一套编程接口,用来实现Java代码与本地的C/C++代码进行交互 2、用途: 可以通过JNI调用系统提供的api,因为操作系统或者抵触硬件驱动几乎都是c/c++写的。Java和C/C++不同 ,它不会直接编译成平台机器码,而是编译成虚拟机可以运行的Java字节码的.class文件,通过JIT技术即时编译成本地机器码,...

调上调下的女生 1402

多标签损失之Hamming Loss(PyTorch和sklearn)、Focal Loss、交叉熵和ASL损失

多标签损失

wuli_xin的博客 4462

Android Studio 中编译 JNI 代码

Android Studio 中编译 JNI 代码 经常需要实现一些 C,C++ 接口的功能模块,提供给 java 层调用。 那么就需要利用 JNI 写接口提供 java 的 native 调用。 必不可少的一步就是编译 JNI 代码。 需要的文件 (项目) src main cpp JNI 代码(依赖) java (接口类 class) build.gradle CM...

描绘自己的王国…… 2056

用Python实现四叉树(quad tree)

import numpy as np #正方形类 class square: #lx、ly为左上角坐标(x对应行号,y对应列号),rx、ry为右下角坐标 def __init__(self,lx,ly,rx,ry): self.lx=lx self.ly=ly self.rx=rx self.ry=ry #检查该矩阵中是否满足条件 #参数:原矩阵,阈值 #返回值:布尔类型 def check(s

weixin_44164489的博客 5868

STC15单片机双串口通信实战:串口2配置与多设备交互

本文详细介绍了STC15单片机双串口通信的实战配置,重点解析串口2的硬件连接、寄存器设置及多设备交互实现。通过实际项目案例和完整代码示例,帮助开发者快速掌握STC15串口2的配置技巧,解决常见通信问题,提升嵌入式系统开发效率。

weixin_29174013的博客 258

android中jni详细,Android中的JNI使用简介

一、本文说明本文不对Android工程的各种配置做说明,只是简单介绍下开发过程中如何进行C与Java互相调用以及出现异常情况的处理。二、NDK简介Android NDK 是一套允许您使用 C 和 C++ 等语言,以原生代码实现部分应用的工具集。在开发某些类型的应用时,这有助于您重复使用以这些语言编写的代码库。三、JNI简介JNI是Java Native Interface的缩写,它提供了若干的AP...

weixin_34677884的博客 6763

从零开始理解异构算力调度:全国一体化算力算网平台实战解析

本文深入解析了异构算力调度技术在全国一体化算力算网平台中的实战应用。通过资源抽象层设计、动态感知引擎和跨云调度算法,实现AI训练任务的高效资源分配,显著提升计算效率并降低成本。特别针对GPU等异构算力的智能调度方案,为多云协同环境下的AI开发提供实用指南。

weixin_28730927的博客 334
上一篇: android studio2.1解决Unable to detect adb version, adb output
下一篇: mysql特殊字段排序
kernel_
博客等级 码龄12年 8粉丝 50原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值