使用Android Studio自带的NDK编译JNI

/**********************************************************************************
 *                      使用Android Studio自带的NDK编译JNI
 * 说明:
 *     省得自己另外去下载NDK,编译JNI,麻烦。
 *
 *                                          2017-4-30 深圳 龙华民治樟坑村 曾剑锋
 *********************************************************************************/

一、参考文档:
    1. NDK环境搭建-windows篇
        http://www.jianshu.com/p/708e6bf68ae9
    2. Mistake in documentation/error message?
        https://github.com/android-ndk/ndk/issues/264
    3. 编译一个模块时出现undefined reference to `__android_log_print‘
        http://bbs.csdn.net/topics/360020076

二、error:
    1. 错误1:
        1. 错误现象:
            D:\zengjf\SourceCode\Android\android_app\Test>ndk-build
            C:/Users/zengjf/AppData/Local/Android/Sdk/ndk-bundle/build//../build/core/build-binary.mk:687: Android NDK: Module zengjf depends on undefined modules: android_runtime nativehelper cutils utils log
            C:/Users/zengjf/AppData/Local/Android/Sdk/ndk-bundle/build//../build/core/build-binary.mk:701: *** Android NDK: Aborting (set APP_ALLOW_MISSING_DEPS=true to allow missing dependencies)    .  Stop.

            D:\zengjf\SourceCode\Android\android_app\Test>
        2. 解决方法
            1. C:\Users\zengjf\AppData\Local\Android\Sdk\ndk-bundle\build\core\build-binary.mk
            2. 修改内容:
                ...
                ifdef undefined_libs
                    $(call __ndk_warning,Module $(LOCAL_MODULE) depends on undefined modules: $(undefined_libs))

                    # https://github.com/android-ndk/ndk/issues/208
                    # ndk-build didn‘t used to fail the build for a missing dependency. This
                    # seems to have always been the behavior, so there‘s a good chance that
                    # there are builds out there that depend on this behavior (as of right now,
                    # anything using libc++ on ARM has this problem because of libunwind).
                    #
                    # By default we will abort in this situation because this is so completely
                    # broken. A user may define APP_ALLOW_MISSING_DEPS to "true" in their
                    # Application.mk or on the command line to revert to the old, broken
                    # behavior.
                    APP_ALLOW_MISSING_DEPS=true    // add this line
                    ifneq ($(APP_ALLOW_MISSING_DEPS),true)
                        $(call __ndk_error,Aborting (set APP_ALLOW_MISSING_DEPS=true to allow missing dependencies))
                    endif
                endif
                ...
    2. 错误2:
        1. 错误现象:
            undefined references to `__android_log_print‘ follow
        2. 解决方法:
            Android.mk文件中加入LOCAL_LDLIBS += -llog即可
时间: 2024-12-24 07:15:03

使用Android Studio自带的NDK编译JNI的相关文章

Android studio环境下的 NDK(jni)开发

前言 1.什么是NDK? NDK全称是Native Development Kit,NDK提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将so和java应用一起打包成apk.NDK集成了交叉编译器(交叉编译器需要UNIX或LINUX系统环境),并提供了相应的mk文件隔离CPU.平台.ABI等差异,开发人员只需要简单修改mk文件(指出"哪些文件需要编译"."编译特性要求"等),就可以创建出so. 2.为什么使用NDK? 1.代码的保护.由于ap

android studio 1.0 开发 ndk 调用 c++ so库

一个没用过java和安卓的人使用android studio开发带c++ so库的安卓程序用例(以ndk的hello-jni为例),对于不熟悉java和安卓的人来说这个很花时间,希望通过这篇文章帮助跟我一样的人,欢迎随便转载: 1.下载安装android sdk和ndk,ndk r10(目前最新)是单独可以编译c++的,无需cygwin. 2.安装android studio. 3.通过ndk-build命令编译sample中的hello-jni,生成so库. 4.在android studio

android studio使用CMake和NDK,实现应用自身被卸载时打开某一网址

实现应用自身被卸载时打开某一网址的c代码 MyActivity: public class MyActivity extends Activity { /** * Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.ma

关于Android Studio中点9图的编译错误问题

Android中的点9图想必大家都非常熟悉了,能够指定背景图片的缩放区域和文本内容的显示区域,常见如QQ聊天界面的背景气泡这种文本内容不固定并需要适配的应用场景. 这里也给大家准备了一张图,详细介绍了一下"Android设计中的.9.png",大家可以点击放大查看: 以前在使用Eclipse时候很少会出现点9图的编译错误问题,但是在转向Android Studio的过程中,你可能会遇到.比如你将Eclipse项目转化为Android Studio项目,或者在自己的项目中引入点9图,然后

Android Studio集成crashlytics后无法编译的问题

http://blog.csdn.net/zhuobattle/article/details/50555393 问题描述: 在用fabric集成后编译出现如下错误, Error:Cause: hostname in certificate didn't match: <maven.fabric.io> != <*.motili.com> OR <*.motili.com> OR <motili.com> build.gradle部分脚本(fabric插件自

Android Studio中的CmakeList NDK配置

Android Studio2.2之后直接可以在创建工程师添加NDK支持了,添加之后,main文件夹下会多出一个native-lib.cpp这个文件,如果只为了一个简单的NDK接口,貌似这就结束了.直接在native-lib.cpp下编程即可. 但是,如果使用第三方库,就得重新配置了.到目前为止,网上大半文章都是.mk的配置方法,按照他们的步骤,在AS上一步一步做下去好像很难成功. Android Studio2.2使用Cmake作为跨平台编译工具,创建完一个工程后,JNI的配置都由Cmake来

Android Studio 使用NDK开发

Android Studio 使用NDK编程 使用Android Studio有半年多了,感觉很好用,不就感觉费劲的就是NDK的支持一直不是很好,再Bate版的时候好像0.4.x之前可以使用NDK,当然本身Android Studio本身是支持NDK编译的,下面我就来解释一下怎么使用Android Studio来编译. 很简单,首先要创建你的项目,创建完成之后点击项目右键new->Folder->JNI Folder,如图 然后就生成了jni文件夹 再往里面添加你的c/cpp文件和Androi

android studio build.gradle 中的dependencies 的 compile jar文件

1.其下载之后的存放地址 例如:compile 'com.qiniu:happy-dns:0.2.5' 存放在:.gradle\caches\modules-2\files-2.1\com.qiniu\happy-dns\0.2.5\c0ee8266504682a0e500d95d849a5af94a718df1查找的方法: 1.用gd-gui来查看jar文件,jar文件一般在C:\Users\..\.gradle\cache\..下: 这里可以使用android studio自带的反编译插件,

NDK开发 从入门到放弃(七:Android Studio 2.2 CMAKE 高效NDK开发)

前言 之前,每次需要边写C++代码的时候,我的内心都是拒绝的. 1. 它没有代码提示!!!这意味着我们必须自己手动敲出所有的代码,对于一个新手来说,要一个字母都不错且大小写也要正确,甚至要记得住所有的jni函数等,真是太折磨人了-平时写java代码的时候都是写几个字母会出来一大堆提示然后选择的,这样还有一个好处就是很多时候我们不知道有那些函数,但是我们可以通过obj.,然后就可以看到它有哪些方法函数了. 2. 很多地方会显示为红色,就像是错误提示的那种,当然,如果没错的话还是能编译运行的,但是如