AndroidStudio NDK开发(1)
来源:互联网 发布:财务公司待遇 知乎 编辑:程序博客网 时间:2024/06/05 05:31
感谢 “Sodino” 大神的无私分享!
这是他的博客地址:http://blog.csdn.net/sodino/article/details/41946607感谢 “穷小子” 大神的无私分享!
这是他的博客地址:http://blog.csdn.net/tuoguang/article/details/48141251
不劳而获的喜悦,走向毁灭。
在AndroidStudio中集成开发NDK的步骤
在Eclipse中,需要配置很多东西,手动下载NDK,下载UNIX/Linux模拟环境cygwin等等很多的东西,很麻烦;
但是在AndroidStudio中可以大大简化繁琐的步骤。
我的AndroidStudio版本是1.5.1,推荐使用1.3以上版本。
1.NDK环境配置
1.1. 下载NDK
点击File—>Settings—>Appearance&Behavior—>System Settings—>Android SDK—>SDK Tools
下载NDK开发工具包
2.2. 配置NDK路径
点击File—>Project Structure
配置NDK路径,NDK默认目录是sdk目录下的ndk-bundle
在local.properties文件中查看是否配置成功
2.3. 修改gradle.properties配置
之前是没有修改这条的,会出现很多错误
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.解决方案地址:http://stackoverflow.com/questions/31979965/after-updating-android-studio-to-version-1-3-0-i-am-getting-ndk-integration-is
在gradle.properties文件里加上android.useDeprecatedNdk=true
这句话,就行了
2.Demo程序
2.1 生成.h头文件
因为在Android中,头文件必须严格遵循jni的命名规则,所以我们使用javah自动生成我们需要的头文件
新建一个Android工程
添加native接口
public class MainActivity extends Activity { //静态,添加native接口 static { System.loadLibrary("JniTest"); } public native String getStringFromNative(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TextView textView = (TextView) findViewById(R.id.textView); textView.setText(getStringFromNative()); }}
这时候getStringFromNative方法是红的,因为我们还没有建立jni文件夹和c库(截图不是红的是因为我之后补截了一个)
点击Build—>Make Project编译,生成.class文件
点击view—>Tool Windows—>Terminal,打开控制台
默认进入到的是当前工程的目录,输入命令:cd app\src\main,切换到main目录下
输入javah -d jni -classpath C:\Android\sdk\platforms\android-22\android.jar;….\build\intermediates\classes\debug com.waka.workspace.ndkdemo.MainActivity
提示:命令行意义解析
javah是生成头文件需要的工具
-d jni 在工程下生成jni目录,会在这里放c/c++文件
-classpath C:\Android\sdk\platforms\android-22\android.jar 是sdk文件夹下android.jar所在的文件位置,可以配置到环境变量中快速调用,这里注意要用分号”;”和后面区分开
..\..\build\intermediates\classes\debug 指向debug目录,注意和后面用空格” “区分开
com.waka.workspace.ndkdemo.MainActivity 需要调用ndk的类
注意:不要继承AppCompatActivity,会报错
改为继承Activity,Make Project重新编译,生成.class文件;
再次输入javah -d jni -classpath C:\Android\sdk\platforms\android-22\android.jar;….\build\intermediates\classes\debug com.waka.workspace.ndkdemo.MainActivity
生成头文件成功
可以看到项目里出现了jni文件夹和.h头文件
2.2 在jni目录下建立C源文件
生成了两个文件main.c和main.h
把main.h删了,main.c里改为#include "com_waka_workspace_ndkdemo_MainActivity.h"
,并实现头文件中的方法
JNIEXPORT jstring JNICALLJava_com_waka_workspace_ndkdemo_MainActivity_getStringFromNative (JNIEnv *env, jobject obj) { return (*env)->NewStringUTF(env, "Hello From JNI!");}
2.3 修改build.gradle配置
工程中共有两个build.gradle配置文件,我们修改Project\app\build.gradle这个文件
在defaultConfig分支中加上
ndk { moduleName "JniTest" ldLibs "log", "z", "m" abiFilters "armeabi", "armeabi-v7a", "x86" }
以上配置代码指定的so库名称为JniTest,链接时用到的库,对应android.mk文件中的LOCAL_LDLIBS,及最终输出指定三种abi体系结构下的so库
Android Studio不用配置android.mk文件,但是不用配置不代表他没有,只不过配置过程不用我们来做,我们使用gradle就可以自动生成了
那android.mk在哪呢?
点击Build—>Make Project重新编译,即可找到android.mk文件
这时候运行程序,已经可以看到成功了
- AndroidStudio NDK开发(1)
- AndroidStudio开发NDK
- AndroidStudio NDK开发
- AndroidStudio下初涉NDK开发
- AndroidStudio NDK开发
- AndroidStudio NDK开发
- AndroidStudio NDK开发
- AndroidStudio Ndk 开发
- AndroidStudio配置NDK开发环境
- AndroidStudio集成ndk、开发JNI
- AndroidStudio下的NDK开发
- 使用AndroidStudio进行NDK开发
- AndroidStudio中的NDK开发初探
- AndroidStudio中的NDK开发初探
- AndroidStudio中的NDK开发初探
- AndroidStudio之NDK开发流程(手动版)
- CMake语法简介(androidstudio中利用CMake开发NDK)
- Android NDK 开发(五)AndroidStudio 2.2 NDK的开发环境搭建
- EJB到底是什么??
- 【精品推荐】程序员必定会爱上的十款软件:不用就太浪费了
- 关于Kindeditor编辑
- 海外邮件发不出去怎么办
- Android开发模拟器的选择
- AndroidStudio NDK开发(1)
- python socket编程详细介绍
- 详解Ubuntu的启动配置文件grub.cfg(menu.lst)
- BZOJ 1025: [SCOI2009]游戏|动态规划
- 解惑tomcat如何将标准输出保存到文件——重定向System.out
- 生产、消费者模式
- C++中的虚函数表
- 解决 Linux/Ubuntu: adb shell insufficient permissions for device 的问题
- viewpager+xListivew