用Android Sutdio调试NDK
用Android Sutdio调试NDK
Charly张 发表于2年前
用Android Sutdio调试NDK
  • 发表于 2年前
  • 阅读 2020
  • 收藏 12
  • 点赞 1
  • 评论 0

新睿云服务器60天免费使用,快来体验!>>>   

摘要: 网上用Android Studio调试NDK的资料不多且分散。我将这几天踩过的坑及经验纪录一下,方便其它朋友。我将从导入一个NDK Samples中的项目开始。

网上用Android Studio调试NDK的资料不多且分散。我将这几天踩过的坑及经验纪录一下,方便其它朋友。我将从导入一个NDK Samples中的项目开始。

演示代码放在GitHub上,每个坑为一次Submit。

开发环境

  • 操作系统: Mac OS 10.11.1
  • IDE: Android Studio 1.5.1
  • NDK: android-ndk-r10e

Native链接其它库

加载NDK Samples中的hello-gl2项目后,直接运行会出现如下错误:

Error:(39) undefined reference to `glGetError'
Error:(41) undefined reference to `__android_log_print'
...

build.gradle文件中添加命令来链接相关库,具体可见Mac下用Android Studio运行NDK samples

无法进入Native代码

解决库链接问题后,程序能运行正确运行在设备上,可无法中断在Native代码上的断点处。

buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            ndk {
                debuggable = true
            }

        }
        debug {
            debuggable = true
            jniDebuggable = true
        }

    }
  • 移除项目下的jniLibs文件夹

目测这个不移除,默认就会调用里面的代码,而不走新编译的Native库。

方法总结

  1. 修改build.gradle中的buildTypes,使app-native*可调试
  2. 移除项目中的jniLibs文件夹

采用实验版插件调试

更简单的方法是,按照Experimental Plugin User Guide介绍,在Android Studio中可以采用实验版插件进行调试。最快捷的方式是直接从Google的GitHub上check最新的代码即可。

Native引用STL库

gl_code.cpp中添加如下代码:

#include <string>
using  namespace std;

运行程序,报出错误string: No such file or directory。解决的方法是:修改build.gradle中的**defaultConfig{..}**如下: 修改配置

P.S. build.gradle配置修改可参考

注意: 如果按照以上方法配置,将忽略项目中已存在的Android.mk文件而自动生成一个位于build文件夹下的Android.mk。Android Studio默认编译jni文件夹下东西,且项目中的Application.mk文件配置将失效。上图链接STL库设置编译选项Application.mk中相应的配置选如下:

APP_STL := gnustl_static
APP_CPPFLAGS := -std=c++11

示例代码

ndk-debugging

  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 8
博文 21
码字总数 15101
×
Charly张
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: