近期准备研究一下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. Codeforces Round #449 (Div. 2) A. Scarborough Fair【多次区间修改字符串】

    A. Scarborough Fair time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  2. Python的程序结构[1] -> 方法/Method[2] -> 魔术方法 __init__ / __del__ / __new__

    魔术方法 / Magic Method 魔法方法就是可以给你的类增加魔力的特殊方法(实质应称为特殊方法,魔术方法在JavaScript中有所体现,对象具有不透明特性,而且无法在自定义对象中模拟这些行为 ...

  3. Linked List Random Node -- LeetCode

    Given a singly linked list, return a random node's value from the linked list. Each node must have t ...

  4. COCOS2d 标准 android.MK

    LOCAL_PATH := $(call my-dir) include$(CLEAR_VARS) LOCAL_MODULE := game_shared PP_CPPFLAGS := -frtti ...

  5. iOS_字典数组 按key分组和排序

    int main(int argc, const charchar * argv[]) { @autoreleasepool { // 1.定义一个测试的字典数组 NSMutableArray *di ...

  6. Dreamweaver CS5个性化设置

    Dreamweaver CS5个性化设置 编辑 --> 转到行 显示工具栏(上面包含“新建.保存.保存全部”等按钮) 查看 --> 工具栏 --> 标准 也可右键单击显示菜单 延伸阅 ...

  7. WebStrom配置多个项目的Dweployment时,设置默认的启动配置

    有时候,我们在WebStrom中打开多个项目,但是每个项目可能的Deployment的配置不同,所以每次在项目中时,可能打开的网页并不对.所以需要设置默认的启动的Deployment.下面的内容是设置 ...

  8. ARCGIS FLEX API加载google地图、百度地图、天地图(转)

    http://www.cnblogs.com/chenyuming507950417/ Flex加载google地图.百度地图以及天地图作底图 一  Flex加载Google地图作底图 (1)帮助类G ...

  9. iframe.contentWindow 属性:关于contentWindow和contentDocument区分

    定义和用法 contentDocument 属性能够以 HTML 对象来返回 iframe 中的文档,可以通过所有标准的 DOM 方法来处理被返回的对象. 语法:frameObject.content ...

  10. Xml解析(Dom解析xml)

    xml四种解析方式: DOM 平台无关的官方解析方式 优点:形成了树结构,直观好理解,代码更易编写 解析过程中树结构保留在内存中,方便修改 缺点:当xml文件较大时,对内存耗费比较大,容易影响解析性能 ...