从ndk的安装到Android的apk增量升级(1)jni的简单应用
来源:互联网 发布:淘宝客注册步骤 编辑:程序博客网 时间:2024/06/05 06:59
想要学习jni的调用先要理解他的原理,在这里我就不写了,在网上搜一下都能找到详尽的文章。
本文只是围绕网上的一篇博客进行解释和补充,主要是我自己在再次接触的时候遇到的问题,之前也做过一些但是时间一长就忘记了,因此写这个文章来作为自己的一个笔记,以后忘记了方便查看。
首先是ndk环境的安装,然后写个类似于hello word的demo
一.ndk的下载(在ndk_r7之后其内部便集成了Cygwin模拟的环境,所以不用去额外的安装Cygwin)连接:http://c93.yunpan.360.cn/my#%2F%E6%96%87%E6%A1%A3%2F(仅供自己用,360云盘上的,其他人可到网上下载r7以上的版本都可以)
二.eclipse中ndk环境的搭建:(每一个progect对应着一个ndk的builder,也就是是在ndk开发的时候是对每一个工程搭建的ndk环境,以上为个人认为)
2.1参考:http://www.cnblogs.com/yejiurui/p/3476565.html中的很详细
2.2注意的点:
2.2.1:自己定义的ndk_builder要放到Builers的最上面
2.2.2:在第三步中的specify working set of relevant of resources 选取得之前建好的jni文件夹就是在之后的Android.mk中的LOCAL_PATH的值
三.安装完ndk之后就是简单jni的应用,即调用本地的方法。(也是参考上面的连接)
3.1注意的点:在写完JniClient类,也就是调用native方法的类之后生成.h文件(头文件)的时候注意:
3.1.1:进入到自己工程所存的workspace中找到自己工程的bin\classes文件到此为止,然后打开dos窗口同时进入到此文件夹中:执行命令
javah -jni com.example.HelloWorld(包名加类名,不用加.class这样的后缀);然后会在bin\classes下面生成 一个com.example.HelloWorld.h的文件,这就是你的.c文件的头文件了。将.h文件考到eclipse中的工程中的jni的文件夹中。
3.3.2:接下来就是写自己的.c文件了,也就是真正实现功能的c代码,以便编译成为.so文件(在eclipse中写和别的编辑器中写都是可以的),写好后将其copy到jni文件夹中。
3.3.3:新建Android.mk文件,连接java和c的作用;
3.3.4:为了生成兼容不同cpu的.so文件,还要自己写一个Application.mk文件 可以参考:http://www.cnblogs.com/mengshu-lbq/archive/2013/03/29/2988657.html
四.以上的编译成.so文件都会在eclipse中自动完成,因为在配置ndk环境的时候已经配置完成了。(保存文件的时候如果没有自动生成.so文件,就将工程clean一下)
如果想要在别的工程中调用已经编译好的.so文件,那么注意:a.将.so文件考入新的工程中b.控制调用native方法的类的包名和类的名称都要完全相同
五.运行就好了
六.下面是几个文件的代码,简单的实现了一个近似于hello word的功能
主activity类:
package com.example.gongjni;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends Activity implements OnClickListener{
private TextView showTv;
private Button showBtn;
static{
System.loadLibrary("gongjni");
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
private void initView() {
showTv = (TextView) findViewById(R.id.show_tv);
showBtn = (Button) findViewById(R.id.show_btn);
showBtn.setOnClickListener(this);
}
@Override
public void onClick(View arg0) {
showTv.setText(JniClient.getGongJniStr());
}
}
控制调用本地方法的类:
package com.example.gongjni;
public class JniClient {
public static native String getGongJniStr();
}
JniClient生成的.h,头文件
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_example_gongjni_JniClient */
#ifndef _Included_com_example_gongjni_JniClient
#define _Included_com_example_gongjni_JniClient
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_example_gongjni_JniClient
* Method: getGongJniStr
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_com_example_gongjni_JniClient_getGongJniStr
(JNIEnv *, jclass);
#ifdef __cplusplus
}
#endif
#endif
真正实现功能的.c文件
#include <string.h>
#include <jni.h>
#include "com_example_gongjni_JniClient.h"
JNIEXPORT jstring JNICALL Java_com_example_gongjni_JniClient_getGongJniStr
(JNIEnv* env,jobject thiz ){
return (*env)->NewStringUTF(env, "Hello from JNI ! Compiled with ABI ");
}
Android.mk文件(关于其中的各个的含义用时百度)
LOCAL_PATH := $(call my-dir)
$(warning "the value of LOCAL_PATH is$(LOCAL_PATH)")
include $(CLEAR_VARS)
LOCAL_MODULE := gongjni
LOCAL_SRC_FILES := gongjni.c
include $(BUILD_SHARED_LIBRARY)
Application.mk文件
http://download.csdn.net/detail/yyh352091626/9417229
本文只是围绕网上的一篇博客进行解释和补充,主要是我自己在再次接触的时候遇到的问题,之前也做过一些但是时间一长就忘记了,因此写这个文章来作为自己的一个笔记,以后忘记了方便查看。
首先是ndk环境的安装,然后写个类似于hello word的demo
一.ndk的下载(在ndk_r7之后其内部便集成了Cygwin模拟的环境,所以不用去额外的安装Cygwin)连接:http://c93.yunpan.360.cn/my#%2F%E6%96%87%E6%A1%A3%2F(仅供自己用,360云盘上的,其他人可到网上下载r7以上的版本都可以)
二.eclipse中ndk环境的搭建:(每一个progect对应着一个ndk的builder,也就是是在ndk开发的时候是对每一个工程搭建的ndk环境,以上为个人认为)
2.1参考:http://www.cnblogs.com/yejiurui/p/3476565.html中的很详细
2.2注意的点:
2.2.1:自己定义的ndk_builder要放到Builers的最上面
2.2.2:在第三步中的specify working set of relevant of resources 选取得之前建好的jni文件夹就是在之后的Android.mk中的LOCAL_PATH的值
三.安装完ndk之后就是简单jni的应用,即调用本地的方法。(也是参考上面的连接)
3.1注意的点:在写完JniClient类,也就是调用native方法的类之后生成.h文件(头文件)的时候注意:
3.1.1:进入到自己工程所存的workspace中找到自己工程的bin\classes文件到此为止,然后打开dos窗口同时进入到此文件夹中:执行命令
javah -jni com.example.HelloWorld(包名加类名,不用加.class这样的后缀);然后会在bin\classes下面生成 一个com.example.HelloWorld.h的文件,这就是你的.c文件的头文件了。将.h文件考到eclipse中的工程中的jni的文件夹中。
3.3.2:接下来就是写自己的.c文件了,也就是真正实现功能的c代码,以便编译成为.so文件(在eclipse中写和别的编辑器中写都是可以的),写好后将其copy到jni文件夹中。
3.3.3:新建Android.mk文件,连接java和c的作用;
3.3.4:为了生成兼容不同cpu的.so文件,还要自己写一个Application.mk文件 可以参考:http://www.cnblogs.com/mengshu-lbq/archive/2013/03/29/2988657.html
四.以上的编译成.so文件都会在eclipse中自动完成,因为在配置ndk环境的时候已经配置完成了。(保存文件的时候如果没有自动生成.so文件,就将工程clean一下)
如果想要在别的工程中调用已经编译好的.so文件,那么注意:a.将.so文件考入新的工程中b.控制调用native方法的类的包名和类的名称都要完全相同
五.运行就好了
六.下面是几个文件的代码,简单的实现了一个近似于hello word的功能
主activity类:
package com.example.gongjni;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends Activity implements OnClickListener{
private TextView showTv;
private Button showBtn;
static{
System.loadLibrary("gongjni");
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
private void initView() {
showTv = (TextView) findViewById(R.id.show_tv);
showBtn = (Button) findViewById(R.id.show_btn);
showBtn.setOnClickListener(this);
}
@Override
public void onClick(View arg0) {
showTv.setText(JniClient.getGongJniStr());
}
}
控制调用本地方法的类:
package com.example.gongjni;
public class JniClient {
public static native String getGongJniStr();
}
JniClient生成的.h,头文件
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_example_gongjni_JniClient */
#ifndef _Included_com_example_gongjni_JniClient
#define _Included_com_example_gongjni_JniClient
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_example_gongjni_JniClient
* Method: getGongJniStr
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_com_example_gongjni_JniClient_getGongJniStr
(JNIEnv *, jclass);
#ifdef __cplusplus
}
#endif
#endif
真正实现功能的.c文件
#include <string.h>
#include <jni.h>
#include "com_example_gongjni_JniClient.h"
JNIEXPORT jstring JNICALL Java_com_example_gongjni_JniClient_getGongJniStr
(JNIEnv* env,jobject thiz ){
return (*env)->NewStringUTF(env, "Hello from JNI ! Compiled with ABI ");
}
Android.mk文件(关于其中的各个的含义用时百度)
LOCAL_PATH := $(call my-dir)
$(warning "the value of LOCAL_PATH is$(LOCAL_PATH)")
include $(CLEAR_VARS)
LOCAL_MODULE := gongjni
LOCAL_SRC_FILES := gongjni.c
include $(BUILD_SHARED_LIBRARY)
Application.mk文件
APP_ABI := armeabi armeabi-v7a x86
http://download.csdn.net/detail/yyh352091626/9417229
0 0
- 从ndk的安装到Android的apk增量升级(1)jni的简单应用
- Android实现应用的增量更新\升级
- Android实现应用的增量更新\升级
- Android NDK实现apk文件的增量更新
- Android studio下增量升级功能的NDK开发
- Android SDK、NDK、JNI的简单介绍
- Android SDK、NDK、JNI的简单介绍
- Android NDK JNI 的简单使用
- android studio JNI/NDK的简单使用
- android ndk的简单应用
- 从NDK下载到JNI调用的整个流程
- JNI NDK (1)---JNI NDK 的简单说明及从Java层中访问C/C++层
- [置顶] Android实现应用的增量更新\升级 标签: 增量更新Androidbsdiffpatch增量升级 2016-01-25 16:01
- Android实现应用的增量更新\升级---其一
- Android实现应用的增量更新\升级---其二
- Android apk增量升级
- Android的APK升级以及下载安装
- 实现应用的增量更新\升级
- 303. Range Sum Query - Immutable
- C++ STL set容器常用用法
- html5新增标签
- SpringMVC Controller 介绍
- SQL queries contain complex joins, subqueries, and some aggregates
- 从ndk的安装到Android的apk增量升级(1)jni的简单应用
- cvc-complex-type.2.4.a: Invalid content was found starting with element 'init-param'.
- mac上配置android adb命令
- Problem4-1008
- Java知识图谱收集整理
- 求2D照片转3D模型开发接口
- 关于网站漏洞的案例和解决思路
- java.lang.NoSuchMethodError
- 返回值