近日有个算法(检测碰撞)需要用C++实现,目的是IOS和ANDROID中共享同一段程序。

下面说说android调用这段程序过程中遇到的一些事情。(过程中网上搜索了一些相关文章,大部分说的是eclipse环境中的教程,所以有必要写这篇文章,免得自己遗忘再走弯路)

算法已经完成,接下来自然的过程就是单步调试和日志打印这段程序。
我的IDE环境:Android Studio 1.5.1,ndk是android-ndk-r10e.
 
首先,如何设置ndk目录,如何把.h和.cpp文件放到项目中,如何按照规范写类似

JNIEXPORT jboolean JNICALL Java_com_example_shenzhigang_collisiondetection_Peng_isCollided
这样的代码,等等这些教程,网上多,不再叙述。
 
接下来单步调试的支持:
步骤1:打开模块的build.gradle文件,添加类似如下代码到defaultConfig节点下
ndk {
moduleName "HelloJNI"
stl "stlport_static"
ldLibs "log"
}

这里的ldLibs "log"后面会说到, moduleName "HelloJNI"这里的HelloJNI只需要和java代码中

System.loadLibrary("HelloJNI");
这里对应即可。
 
步骤2:添加以下代码到buildTypes下(同样是步骤1中的文件)

debug {
jniDebuggable true
}

步骤3:同步build.gradle文件,不出意外的话如图所示的图标不再有红色叉叉,OK,选择app-native,尽情DEBUG吧.....

 
 
===============================================================================================
 
下面说说如何在jni程序中输出日志,这里也是android studio和eclipse不同的地方,也是我写这文章的主要目的:
步骤1:打开模块的build.gradle文件,添加类似如下代码到defaultConfig下的ndk节点下
    ldLibs "log"

顺便说一下,eclipse下是直接修改Android.mk文件,添加LOCAL_LDLIBS:=-L$(SYSROOT)/usr/lib -llog这样的代码。虽然android studio也最终会生成Android.mk文件,但这个文件如果去修改的话,每次build都会被自动覆盖回去的。

 
步骤2:这步和eclipse下是相同的,在需要打印日志的文件下,

#include <android/log.h>
然后使用__android_log_print函数,不再细述。

Android Studio中JNI程序的单步调试和日志打印的更多相关文章

  1. android studio 中jni底层日志的打印

    1 添加ndk对log支持若需要添加ndk对log的支持,只需要通过以下2步即可实现. 1.1 修改Android.mk如生成的库文件是“.so文件”,则在Android.mk中添加如下内容:LOCA ...

  2. Android Studio中JNI -- 1 -- 配置方法

    1.配置NDK 1.1 下载NDK Android Studio 1.2 配 android-ndk-r10e,不同版本的Studio需要配置不同的ndk,下载完成后,随便解压放至某个文件目录下 1. ...

  3. android studio 中怎么使用adb无线调试

    之前再eclipse下进行安卓开发,但谷歌却抛弃了eclipse而力挺android studio开发环境,没办法只好跟着走. 在eclipse下开发时调试用adb无线方式特别方便,但是在androi ...

  4. Android Studio中JNI -- 2 -- 编写c文件

    继上一篇,我们在native接口中编写了2个方法 生成的相应.h文件 这时,需要我们自己去完善.c文件 /* DO NOT EDIT THIS FILE - it is machine generat ...

  5. .Net程序员之不学Java做安卓开发:Android Studio中的即时调试窗口

    对学.Net的人来说,JAVA开发是一场噩梦. .net中的即时窗口,调试时直接在里面写代码,对程序中的各种方法/属性进行调用,很方便. Android Studio中找了好久,参考如下网址,也有类似 ...

  6. 在android studio中集成javah, ndk-build进行JNI开发

    最近在搞一个android上控制LED灯闪烁的功能,用到了串口编程,搜索了一下,发现Google发布了一个demo,android-serialport-api.有现成的代码和APK,要想自己改JNI ...

  7. cordova开发插件,并在android studio中开发、调试

    之前用过cordova Lib包装H5页面,自己写插件,但做法是野路子,不符合cordova插件的开发思路,这次项目又需要包装H5页面,同时需要自定义插件.所以又折腾了一次cordova自定义插件. ...

  8. 关于Android Studio中使用jni进行opencv配置开发环境的要素秘诀

    使用jni进行opencv开发可以快速地将PC端的opencv代码移植到手机上,但是如何在android studio下进行配置,网上几乎找不到教程,大多都是eclipse下使用mk文件的方法,找不到 ...

  9. Android Studio中 ADB WIFI插件进行无线调试实践

    首先要确保电脑和手机在同一个局域网中.具体步骤如下 1.Android Studio中安装ADB WIFI插件.安装成功后重启Android Studio.(没有安装过插件的同仁,请自己搜索) 2.手 ...

随机推荐

  1. Tomcat部署web项目

    在Myeclipse中,我们很容易做到这一步:把一个web项目生成war文件 其实在eclipse中,实现这样的功能,也是很简单的. 下面就看一下是怎样操作的吧! 新建一个web项目: 取名为:ecl ...

  2. PHP+Apache+Zend Studio+MySql+Navicat+phpAdmin

    本文章介绍整个PHP开发环境的搭建 数据库:MySql  5.5.50 数据库软件:Navicat 11.1.20和phpAdmin 4.6.5.1任选 php库:PHP 7.0.13 服务器:Apa ...

  3. Linux cut命令

    [root@wang /]# cat /etc/passwd root:x:::root:/root:/bin/bash bin:x:::bin:/bin:/sbin/nologin daemon:x ...

  4. makefile之变量赋值

    makefile中变量赋值有4种方法: = ,   := ,  += ,  ?= = :直接赋值 变量 = 值 :=   :位置相关赋值 如果右值为一个值,那么它和=没区别,如果右值为变量,那么左边变 ...

  5. Ubuntu的个个版本代号

    首先版本号跟发布日期有关,.04 为 4月份发布,.10 则在10月份发布.另外每个版本都会选一个动物作为代号,下面是 Ubuntu 从 4.10 开始的版本代号和对应动物: Ubuntu Warty ...

  6. 理解Docker(2):Docker 镜像

    本系列文章将介绍Docker的有关知识: (1)Docker 安装及基本用法 (2)Docker 镜像 (3)Docker 容器的隔离性 - 使用 Linux namespace 隔离容器的运行环境 ...

  7. [转]ASP.NET Core 之 Identity 入门(一)

    本文转自:http://www.cnblogs.com/savorboard/p/aspnetcore-identity.html 前言 在 ASP.NET Core 中,仍然沿用了 ASP.NET里 ...

  8. 【2016-11-7】【坚持学习】【Day22】【C# 委托的应用】

    我觉得我对委托的概念还没有完全掌握,于是,我需要继续思考,学习它的应用实现.

  9. js/jquery/html前端开发常用到代码片段

    1.IE条件注释 条件注释简介 IE中的条件注释(Conditional comments)对IE的版本和IE非IE有优秀的区分能力,是WEB设计中常用的hack方法.条件注释只能用于IE5以上,IE ...

  10. c++中static关键字的用法总结

    类中的静态成员真是个让人爱恨交加的特性.我决定好好总结一下静态类成员的知识点,以便自己在以后面试中,在此类问题上不在被动. 静态类成员包括静态数据成员和静态函数成员两部分. 一 静态数据成员: 类体中 ...