AndroidStudio NDK , VisualStudio NDK

个人感觉在AndroidStudio中开发NDK有点麻烦,不如在VS中开发高效简单,

可以参考VS+VA搭建顺手的NDK集成开发环境,后面转了这篇文章,同时添加了一些新的高效方法; 

 不过目前VS2015支持Android,IOS库开发,如果为了更加的方便,可以用VS2015,开发NDK,还默认包含了上述的方法;后面讲解;


JNI dir;

NDK

jni.srcDirs = []                      

jniLibs.srcDirs =['src/main/libs'] 
 
或者直接在main目录下建立jniLibs目录;
mk
1:

LOCAL_PATH:= $(call my-dir)

#
include $(CLEAR_VARS)
LOCAL_MODULE := hello
LOCAL_SRC_FILES := F:\hello\jni\libhello.so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/tools/include
include $(PREBUILT_SHARED_LIBRARY)


#
include $(CLEAR_VARS)

LOCAL_MODULE := hello-jni
LOCAL_CFLAGS := -std=c++11 -fexceptions
LOCAL_LDLIBS := -llog

LOCAL_SHARED_LIBRARIES := libhello

LOCAL_SRC_FILES := mainactivity.cpp

include $(BUILD_SHARED_LIBRARY)

2:

#APP_PLATFORM := android-9

APP_ABI := armeabi-v7a

#APP_STL := stlport_static
APP_STL  := gnustl_shared

APP_GNUSTL_FORCE_CPP_FEATURES := exceptions rtti


4:ndk-build.cmd

cd ..

ndk-build


5: javah.cmd ,main dir execute;

javah -d jni -classpath D:\android_sdk\platforms\android-22\android.jar;D:\android_sdk\extras\android\support\v4\android-support-v4.jar;D:\android_sdk\extras\android\support\v7\appcompat\libs\android-support-v7-appcompat.jar;..\..\build\intermediates\classes\debug com.example.administrator.myapplication.MainActivity


这主要是因为native函数写到MainActivity中了,所以用javah命令的时候需要将用到的jar全部写上;一般强烈建议,重新写一个类声明native函数,这样javah命令比价简单,然后在相关的地方用这个类对象就可以了;



VS+VA搭建顺手的NDK集成开发环境

工欲善其事,必先利其器。

VS+VA有高效的提示,而且VS的IDE非常好用;如果没有特殊要求,通常的代码编写,个人建议用这个方法;

Android NDK开发环境,可选择VIM+插件、Eclipse+CDT等,这里介绍另一种选择:VS+VA

软件准备:
Visual studio 2008 // 其他版本也行,这里以VS2008为例。
Visual assist X
Android NDK

环境变量:
将NDK根目录加入%PATH%环境变量。

打开VS2008,新建Makefile项目 (中文版:生成文件项目)
点击图片以查看大图图片名称:	1.png查看次数:	15文件大小:	63.7 KB文件 ID :	96090

在项目向导中填写以下内容
点击图片以查看大图图片名称:	2.png查看次数:	17文件大小:	38.0 KB文件 ID :	96091

Build command line: ndk-build NDK_PROJECT_PATH=. APP_BUILD_SCRIPT=./Android.mk
Clean commands: ndk-build clean NDK_PROJECT_PATH=. APP_BUILD_SCRIPT=./Android.mk
Rebuild command line: ndk-build -B NDK_PROJECT_PATH=. APP_BUILD_SCRIPT=./Android.mk
Include search path: E:\Android\android-ndk-r9d\platforms\android-12\arch-arm\usr\include // 对应到你本机的目录及版本。
点击完成。
点击图片以查看大图图片名称:	3.png查看次数:	10文件大小:	95.8 KB文件 ID :	96092

这些设置可以在工程属性中修改;Debug、Release可以分别设置。
点击图片以查看大图图片名称:	4.png查看次数:	14文件大小:	45.5 KB文件 ID :	96093
写代码测试一下
点击图片以查看大图图片名称:	5.png查看次数:	16文件大小:	95.3 KB文件 ID :	96094

试试编译、清理、重新编译有无问题。
点击图片以查看大图图片名称:	6.png查看次数:	11文件大小:	18.9 KB文件 ID :	96095

搞定,开始愉快的写代码吧。 

{

为了简便,可以直接将NDK的sample中的\hello-jni\jni目录下的文件,mk + c文件全部copy到刚才新建的工程目录下;

然后右键添加这些文件;

然后F7,直接编译就得到Android上运行的so文件了;

}


新添加:通过javah命令行生成JNI的.h头文件后,可以通过VC助手,右键创建cpp文件(Create File),然后创建函数实现;

       非常高效方便;

新添加:如果还想执行别的命令或程序或bat文件,可以在调试->命令:中输入文件路径,执行就可以了;



当然,用简单优化一下上述命令行路径,添加jni文件夹到工程目录,然后添加文件到目录, 包括mk文件,这样也就可以比人直接命令行编译了;

因为NDK的编译文件必须在jni文件夹中;(但是好像在jni文件夹中,所有类型的so都编译了,这样效率有点慢,而且最后还有一个错误,虽然不影响,但是不好看  ,具体更好的方法用下面讲的“VS2015 NDK 开发”)

当然,如果不想这么修改,给别代码的时候,需要将工程下的代码,复制到jni文件夹中才可以ndk-build编译;









VS2015 NDK 开发:

vs2015的安装,一定要安装想的VS2015中的NDK包,里面包含了微软的一些mk文件,我们可以参考,写我们的mk文件;

其中Android的sdk如果自己有,可以不用安装,在tools-》Options-》Cross Platform -》C++:这个页面中配置;

在VS2015中开发Android的NDK有几种方法;


方法一:

上面讲解的手动配置VS2010的NDK开发,但是在VS2015中,只需要直接生成相关工程就可以有上面的配置了;

New Project -》Templates -》 Visual C++ -》Windows -》Cross Platform -》Makefile Project(Android);

这样就生成了Android的可以通过mk文件编译NDK的工程;

我们可以将NDK中的例子的JNI文件夹直接复制到新建的工程目录下编译就可以了;

为了方便,可以将相关文件直接右键添加到工程中,方便查看编写;


自己建立的jni目录中没有mk文件,vs2015会调用 ProgramData\Microsoft\AndroidNDK\android-ndk-r10e\build\core 中的mk文件,编译默认名为lib.a的库文件;


看了上述描述,是不是很方便!


如果VS2015的VC助手有了,那么用VS2015就非常方便了;


方法二:

直接选择 Dynamic Shared Library(Android),或者 Static Library(Android),软后添加自己的h文件和cpp文件就可以编译相关的Android 的 NDK库了;

这个方法不需要mk文件,VS内部已经根据相关配置编译了,相当于有mk配置编译文件了;

这个方法中编写NDK就和编写一般的vc工程基本上一样了;






在VS2015中的Android java代码编写插件;

一般安装完成VS2015后,编写Android的Java代码,java代码没有提示,也没有函数自动提示补充;

这个时候需要一个插件,相当于MFC中的VC助手: Java Language Service for Android and Eclipse Android Project Import

地址:https://visualstudiogallery.msdn.microsoft.com/53e6e65b-fa0f-411a-a98d-7911009537ac 





VS2015中的一些调试问题:

1:

用vs2015开发Android程序的时候(库文件,或者native,或者java Android)一般可以在IDE上面直接看到目前连接的Android设备,编译完成后执行,自动安装到目标机器;但是有一天,突然无法找到设备了,但是设备确实连接,而且360助手可以看到,所以一定是配置出现问题了;

解决方法:将Android sdk中的 Android\sdk\platform-tools   和 Android\sdk\tools   目录配置到系统的环境变量path中就可以了;

今天开机又发现vs2015不能发现Android设备了,于是上网一查,原来是我的360手机助手连接了设备,将360手机助手断开连接,重启vs2015就可以了;

同理,豌豆荚等手机助手工具如果连接了设备,vs2015也无法找到Android设备;但是Androidstudio没有问题;



2:

在vs2015中,Android的编译有两个选项,有Native Only 和 Java Only;

其实目的就是一个调试的本地代码(就是C或者C++的那个库文件代码),一个是java文件代码;




3:

添加库;

添加新的的so库到pack文件夹,这样可以打包道APK;

javaloadlibrary;这句话要放到当前so库的前面loadlibrary;


4:

vs2015 updat1; 后续版本有问题;


5:一些微软官方文章:

介绍:

https://www.visualstudio.com/explore/msft-android-emulator-vs

示例:

https://www.visualstudio.com/explore/cplusplus-mdd-vs.aspx

https://msdn.microsoft.com/library/dn707591.aspx

https://msdn.microsoft.com/zh-cn/library/dn707596.aspx




当然Qt也可以(最新版本),不过还是觉得VS方便,Qt和VS2015的的“方法二”差不多;

so:

外部库;

当前目录下;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

chinabinlang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值