初学使用android studio的NDK

3 篇文章 0 订阅
1 篇文章 0 订阅

android开发我需要进入新的阶段,这样才能全面掌握android技术。所以从NDK开始,这次是通过使用C++中的andorid的log.h来实现在C++中打印Log信息。


由于在C++方面和gradle方面的了解属于小白,所以费了不少功夫。


1.首先创建一个项目(MyCLog)这个不用说,然后创建一个自己的类,并且创建一个log方法。

public class CLog {

    public static native void log();

}

2.生成jni文件,打开android studio的Terminal,然后进入到项目的java目录下,然后输入:javah -d ../jni -jni com.ndk.clog.CLog,这样就生成来jni目录和相应的.h文件,这里生成了com_ndk_clog_CLog.h。


3.添加.cpp文件com_ndk_clog_CLog.cpp,然后把.h文件下的方法拷贝到.cpp中

JNIEXPORT void JNICALL Java_com_ndk_clog_CLog_log
(JNIEnv *, jclass);
然后去掉JNIEXPORT和JNICALL,并且实现这个方法。这个时候需要配置下项目的ndk路径。这个就不多说来,在Open Module Setting里面配置下。


4.这个时候测试下,会发现编译不过去,gradle信息限制

Error:Execution failed for task ':app:compileDebugNdk'.
> Error: NDK integration is deprecated in the current plugin.  Consider trying the new experimental plugin.  For details, see http://tools.android.com/tech-docs/new-build-system/gradle-experimental.  Set "android.useDeprecatedNdk=true" in gradle.properties to continue using the current NDK integration.

这个时候按照提示,在项目的gradle.properties里面加入android.useDeprecatedNdk=true,然后运行下,可以运行了。


5.接下来需要做的,是在com_ndk_clog_CLog.cpp中实现Log信息的打印,首先需要include一个头文件<android/log>,这个时候就可以用里面的方法了,当然,程序中有可能还有错误提示,可能会使没有引入jni.h,然后在方法中调用__android_log_print来实现打印日志,完成之后,你会发现,在编译的时候又报了一个错误

Error:(11) undefined reference to ‘__android_log_print'

本能觉得是没有load我们的so库,然后加上了System.loadLibrary("MyCLog”);好,再运行下,发现还是报这个错误,一下子蒙了,然后各种查阅资料,有说编译出了问题,需要修改Android.mk,但是在android studio中不用我们写这个文件。然后偶尔在某个博客上面发现了一个解决办法需要在build.gradle中的defaultConfig下面完善下NDK配置中

ndk{
    moduleName "MyCLog"
    ldLibs "log"
    abiFilters 'x86', 'armeabi'
}
其中ldLibs “log”这个是最后添加的,好了,然后在项目中调用java中的native方法就可以成功打印Log日志了。


总结:万事开头难,总算完成来第一个ndk代码,虽然过程有些曲折,但是学到了一些东西。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值