用Android Studio 执行ndk 程序
近期准备研究一下android双进程守护,因为此前用eclipse 写jni习惯了。如今主要用as 工具。在此也试着写个demo 然后在对双进程守护进行研究
1、所需工具
android studio 1.4
ndk :android-ndk-r9d
….其他必备在此就不叙述
2、演示样例介绍
1)、项目创建
打开as 创建一个project 输入包名 com.cayden.jnis
在此假设採用as 生成的布局和activity ,兴许执行会出现故障。
详细兴许在问题部分会进行说明
2)、创建jni java类
java 调用c/c++ 须要jni中间桥梁
详细代码例如以下
package com.cayden.jnis;
/**
* Created by cuiran on 16/2/27.
*/
public class JniUtils {
public native String getCLanguageString();
static {
System.loadLibrary("JniUtils");
}
}
3)、生成h 创建c文件
须要编译将class文件生成相应h文件
详细看图片中的命令
进入build/intermediates/classes/debug下
然后在src/main下创建jni文件夹,将此前生成的文件com_cayden_jnis_JniUtils.h 剪切到此文件夹下,并新建文件 jnitest.c
//
// Created by 崔冉 on 16/2/27.
//
#include "com_cayden_jnis_JniUtils.h"
/*
* Class: com_cayden_jnis_JniUtils
* Method: getCLanguageString
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_com_cayden_jnis_JniUtils_getCLanguageString
(JNIEnv *env, jobject obj){
return (*env)->NewStringUTF(env,"I'm jni");
}
4)、改动activity并进行调用
详细參考代码
package com.cayden.jnis;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
JniUtils jniUtils=new JniUtils();
TextView tv=(TextView)findViewById(R.id.textView);
tv.setText("jni result:"+jniUtils.getCLanguageString());
}
}
5)、 配置ndk及其生成so文件名
在local.properties文件加入ndk.dir=/Users/cuiran/tool/android-ndk-r9d
改动build.gradle 文件
apply plugin: 'com.android.application'
android {
compileSdkVersion 19
buildToolsVersion '19.1.0'
defaultConfig {
applicationId "com.cayden.jnis"
minSdkVersion 14
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
ndk{
moduleName "JniUtils" //生成的so名字
abiFilters "armeabi", "armeabi-v7a", "x86" //输出指定三种abi体系结构下的so库。
}
}
debug{
ndk{
moduleName "JniUtils" //生成的so名字
abiFilters "armeabi", "armeabi-v7a", "x86" //输出指定三种abi体系结构下的so库。
}
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
}
3、执行效果
执行后,显示了在c里面写的内容I’m jni
可是回到项目文件夹下 发现没有看到生成的so文件 可是我们将apk反编译就能够看到。貌似as还是蛮强大的。
能够看一下 反编译后的截图
4、问题整理
1) 报错:“NDK integration is deprecated in the current plugin”的
解决的方法:打开project文件夹下的gradle.properties文件。并在该文件里写入以下这行:
android.useDeprecatedNdk=true
不出意外的话,再次编译project,NDK环境这块就OK了。
2) 报错:error: jni.h: No such file or directory
解决的方法:将compileSdkVersion和targetSdkVersion改成19就编译通过了
用Android Studio 执行ndk 程序的更多相关文章
- 【Android Studio安装部署系列】二十五、Android studio使用NDK生成so文件和arr文件
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 概述 Android Studio使用ndk的简单步骤. NDK环境搭建 下载NDK 下载链接:https://developer.and ...
- Android studio 使用NDK工具实现JNI编程
前言: Android开发中常常会使用到第三方的.so库.在使用.so库的时候就要用到JNI编程.JNI是Java Native Interface的缩写.它提供了若干的API实现了Java和其它语言 ...
- Android Studio 之 NDK篇
由于工作内容的关系,对于NDK的工作涉及比较广(保密性,安全性),所以本章内容讲述一下NDK的基本使用过程. 网上也有很多这样的教程或者描述,但描述的并不完全 开发工具:Android Studio ...
- Mac下Android studio 之NDK配置教程(一)
Mac下Android studio 之NDK配置教程(一) 1.概述 近期项目全线转移到Mac下使用使用Android studio开发. 遇到关键代码封装到 ***native***层,此时在wi ...
- [Android] 环境优化配置Android Studio发展NDK
======================================================== 作者:qiujuer 博客:blog.csdn.net/qiujuer 站点:www. ...
- Android Studio中JNI程序的单步调试和日志打印
近日有个算法(检测碰撞)需要用C++实现,目的是IOS和ANDROID中共享同一段程序. 下面说说android调用这段程序过程中遇到的一些事情.(过程中网上搜索了一些相关文章,大部分说的是eclip ...
- Android Studio增加NDK代码编译支持--Mac环境
Android的APP开发基本都是使用Java或者跨平台框架进行开发的,对于很多APP来说已经足够了,但是,对于提供功能给外部使用或者性能要求很高的需求下,如图像处理等,可能会需要C/C++库的支持, ...
- Android Studio JNI/NDK 编程简介(一)
首先说一下概念及相关的东西: JNI : JNI是Java Native Interface的缩写,它提供了若干的API实现了Java和其他语言的通信(主要是C&C++).从Java1.1开始 ...
- JNI 在Android Studio利用NDK编译运行一个简单的c库
NDK开发,其实是为了项目需要调用底层的一些C/C++的一些东西:另外就是为了效率更加高些.如果你在Eclipse+ADT下开发过NDK就能体会到要么是配置NDK还要下载Cygwin,配置Cygwin ...
随机推荐
- J.U.C并发框架源码阅读(六)ConditionObject
基于版本jdk1.7.0_80 java.util.concurrent.locks.AbstractQueuedSynchronizer.ConditionObject 代码如下 /** * Con ...
- csu1808
csu1808 题意 n 个点间有 m 条地铁,每条地铁可能属于不同的线路,每条地铁有权值即通过时花费的时间,如果乘坐第 i 条地铁来到地铁站 s,再乘坐第 j 条地铁离开,需要花费额外的时间 \(| ...
- kaptcha验证码
@Action("/validimg") public String validimg() throws Exception { genernateCaptchaImage(); ...
- 在Android App中集成Google登录
技术文章 来源:码农网 发布:2016-09-19 浏览:194 摘要:今天,几乎所有的web和移动app都自带谷歌和Facebook登录,这对app开发者和用户来说是一个非常有用的功能,因为几乎每个 ...
- 【IntellJ IDEA】idea的Terminal窗口中文乱码 解决方法
在操作git命令在windows上的idea中的terminal窗口时,总是出现中文乱码的问题 本开始以为是git乱码的问题,如果是GIt中文乱码,解决方案:https://www.cnblogs.c ...
- Enum枚举类使用集合
1.使用扩展方法使用枚举值对于的Description属性值 public static class EnumExtenstion { public static string GetDescript ...
- JAVA常见算法题(七)
package com.xiaowu.demo; /** * 输入一行字符,分别统计出其中英文字母.空格.数字和其它字符的个数. * * @author WQ * */ public class De ...
- [转载]DLL劫持生成器 源码开放(纯WINDOWS SDK)+ 实例分析
本菜最近学习了什么DLL注入啊,hook啊(r3)的相关技术,觉得很好玩,于是深入发现还有DLL劫持这种东西觉得挺好玩的,加上最近看到各种木马分析报告中都还有发现有利用白加黑的现象.于是自己想找几个来 ...
- python核心编程学习记录之数据库编程
- zabbix日志监控
一般情况下,日志最先反映出应用当前的问题,在海量日志里面找到我们异常记录,例如监控系统日志.nginx.Apache.业务日志,然后记录下来,并且根据情况报警. 1.日志监控项介绍 最主要的是监控日志 ...