近期准备研究一下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 程序的更多相关文章

  1. 【Android Studio安装部署系列】二十五、Android studio使用NDK生成so文件和arr文件

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 概述 Android Studio使用ndk的简单步骤. NDK环境搭建 下载NDK 下载链接:https://developer.and ...

  2. Android studio 使用NDK工具实现JNI编程

    前言: Android开发中常常会使用到第三方的.so库.在使用.so库的时候就要用到JNI编程.JNI是Java Native Interface的缩写.它提供了若干的API实现了Java和其它语言 ...

  3. Android Studio 之 NDK篇

    由于工作内容的关系,对于NDK的工作涉及比较广(保密性,安全性),所以本章内容讲述一下NDK的基本使用过程. 网上也有很多这样的教程或者描述,但描述的并不完全 开发工具:Android Studio ...

  4. Mac下Android studio 之NDK配置教程(一)

    Mac下Android studio 之NDK配置教程(一) 1.概述 近期项目全线转移到Mac下使用使用Android studio开发. 遇到关键代码封装到 ***native***层,此时在wi ...

  5. [Android] 环境优化配置Android Studio发展NDK

    ======================================================== 作者:qiujuer 博客:blog.csdn.net/qiujuer 站点:www. ...

  6. Android Studio中JNI程序的单步调试和日志打印

    近日有个算法(检测碰撞)需要用C++实现,目的是IOS和ANDROID中共享同一段程序. 下面说说android调用这段程序过程中遇到的一些事情.(过程中网上搜索了一些相关文章,大部分说的是eclip ...

  7. Android Studio增加NDK代码编译支持--Mac环境

    Android的APP开发基本都是使用Java或者跨平台框架进行开发的,对于很多APP来说已经足够了,但是,对于提供功能给外部使用或者性能要求很高的需求下,如图像处理等,可能会需要C/C++库的支持, ...

  8. Android Studio JNI/NDK 编程简介(一)

    首先说一下概念及相关的东西: JNI : JNI是Java Native Interface的缩写,它提供了若干的API实现了Java和其他语言的通信(主要是C&C++).从Java1.1开始 ...

  9. JNI 在Android Studio利用NDK编译运行一个简单的c库

    NDK开发,其实是为了项目需要调用底层的一些C/C++的一些东西:另外就是为了效率更加高些.如果你在Eclipse+ADT下开发过NDK就能体会到要么是配置NDK还要下载Cygwin,配置Cygwin ...

随机推荐

  1. 【hdu1150】【Machine Schedule】二分图最小点覆盖+简单感性证明

    (上不了p站我要死了,侵权度娘背锅) 题目大意 有两台机器A和B以及N个需要运行的任务.每台机器有M种不同的模式,而每个任务都恰好在一台机器上运行.如果它在机器A上运行,则机器A需要设置为模式ai,如 ...

  2. [POI2010]Beads

    题目大意: 给定一个长度为$n(n\leq200000)$的串$S_{1\sim n}$,选择一个$l$,从$S_1$开始,将$S$分为连续的若干段,使得每一段长度为$l$.令$k$为分出来不同的子串 ...

  3. C语言基础之scanf函数的使用

    0.自己实际遇到的坑 Mac下如果用标准键盘,使用scanf输入时不能用小键盘上的回车,否则系统不能很好的识别. 1.scanf函数的基本使用 1: // 定义一个变量,用来保存用户输入的整数 2: ...

  4. intellij idea 分屏设置 与快捷键

    1.找到分屏功能 File -> setting -> keymap,搜索(注意大小写):   Split Vertically 水平分屏   Split Horizontally 垂直分 ...

  5. WPF中的DesignMode判断

    WPF中提供你一个类似WinForm的DesignMode属性的方法来判断当前是否处于设计器模式: bool IsInDesignMode    {        get { return Desig ...

  6. Android kernel Crash后,定位出错点的方法

    转载:http://blog.csdn.net/wlwl0071986/article/details/11635749 1. 将/prebuild/gcc/linux-x86/arm/arm-lin ...

  7. Springboot集成BeanValidation扩展二:加载jar中的资源文件

    一.需求 今天在搭建Springboot框架的时候,又遇到一个需求:在多模块系统中,有些模块想自己管理BeanValidation的资源文件(默认是启动项目claspath下的 ValidationM ...

  8. [置顶] kubernetes资源类型--RC和RS

    Replication Controller(RC) RC是K8S中的另一个核心概念,应用托管在K8S后,K8S需要保证应用能够持续运行,这是RC的工作内容. 主要功能 确保pod数量:RC用来管理正 ...

  9. org.apache.hadoop.ipc.RemoteException: User: root is not allowed to impersonate root

    修改 core-site.xml文件 vim /usr/local/hadoop/etc/hadoop/core-site.xml 增加: <property> <name>h ...

  10. Hive删除分区

    Hive删除分区语句: alter table table_name drop if exists partition(dt=30301111)