jni 入门 android的C编程之旅 --->环境搭建&&helloworld
来源:互联网 发布:dsp广告系统架构php 编辑:程序博客网 时间:2024/06/10 14:45
需要进行jni的开发有一下几个条件:
1:能初步使用C/C++如果不会,请参读 谭浩强的 C编程语言
2:android应用开发已经基本入门,如果没有,请先行学习
这两个条件基本满足后,我们开始了:
1:环境搭建
相信大家android开发环境是有的哦
A:给eclipse添加 C/C++文件。在 eclipse的help的install new software
B:由于我是windows平台的环境(所以需要安装一个 Cygwin 这个是来模拟我们的linux操作系统的,因为android底层就是一个linux操作系统)
C:安装ndk(ndk是用来跨平台编译的 如果你C学的比较好的话,你会了解:在windows下编译的C代码是无法给java调用的,也无法放到linux系统使用(跨平台性不如java))
这仨就自己百度一步一步搭建吧,由于比较大,我这放哪也不清楚,有机会我会把这些打包放到 网盘供大家下载的,现在大家还是先到其他地方找找教程,搭建一下环境,如果是从网络下载顺利的话,这个安装过程可能需要1-2天
环境搭建完成了,接下来我们就写一个helloworld吧:
看一下目录结构:比我们正常的android应用多了一个 jni目录
我们在里面写了简单的几行c代码:
Hello.c
#include <stdio.h>#include <jni.h>jstring Java_com_test_ndk1_MainActivity_helloFromJNI(JNIEnv* env, jobject obj){//输出一个java字符串//返回一个java字符串//jstring (*NewStringUTF)(JNIEnv*, const char*);char* cstr = "helloFromJNI";return (**env).NewStringUTF(env, cstr);}
注意,这个C可能和我们传统的C编程不太一样,后面我会详细分解这个C怎么写的。
然后,我们在我们的android的项目中去调它
编写 Android.mk
LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE := HelloLOCAL_SRC_FILES := Hello.cinclude $(BUILD_SHARED_LIBRARY)
这个相当于一个跨平台的make,熟悉linux的朋友一定知道 linux下的makefile这个玩意儿,不知道也就先不管了,后面会详细解释,这儿就先不说了
MainActivity
package com.test.ndk1;import com.test.ndk1.R;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.widget.Toast;public class MainActivity extends Activity {//加载函数库static{System.loadLibrary("Hello");}//本地方法 由C实现public native String helloFromJNI(); @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void click(View view){ //调用c代码 Toast.makeText(this, helloFromJNI(), 0).show(); }
然后,很简单的布局文件:activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" > <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:text="调用C代码" android:onClick="click"/></RelativeLayout>
打开cygwin,进入到工程的jni目录下(linux如何进入一个目录,自己稍微看下,和windows基本差不多,如果是要cygwin切换到C盘以外的目录,那就先到根目录,里面有个cygdrive的目录,里面的d e f等就对应你的 D E F盘)
执行 ndk-build
编译成功:
刷新一下工程,可以看到一个obj目录:
然后ndk又帮我们将 libHello.so自动封装到了 libs目录下,自己可以打开看下哦,我就不上图了
运行程序:
ok了,第一个helloworld到此结束,后面我会陆续分享一些原理性的东东给大家哦
- jni 入门 android的C编程之旅 --->环境搭建&&helloworld
- Android入门之环境搭建-helloworld
- Android好奇之旅 环境搭建及Helloworld的诞生
- React入门之HelloWorld及环境搭建
- android-jni 之 环境搭建
- Android JNI环境搭建及开发入门
- Android JNI入门搭建环境(一)
- Android Jni之Helloworld
- Android开发之旅:环境搭建及HelloWorld
- Android开发之旅:环境搭建及HelloWorld
- Android 开发之旅:环境搭建及HelloWorld
- Android开发之旅:环境搭建及HelloWorld
- [备份用途]Android 开发之旅:环境搭建及HelloWorld
- Android开发之旅:环境搭建及HelloWorld(转)
- Android开发之旅:环境搭建及HelloWorld
- Android开发之旅:环境搭建及HelloWorld
- Android开发之旅:环境搭建及HelloWorld
- Android开发之旅:环境搭建及HelloWorld
- cocos2d-x在安卓下编译
- 拷贝构造函数与Const常量引用
- Android Push Notification实现信息推送使用
- 核技法、软间隔分类器、SMO算法——斯坦福ML公开课笔记8
- 《编程精粹》思之代码与产品
- jni 入门 android的C编程之旅 --->环境搭建&&helloworld
- 构建Android Push Notification Service服务端及客户端[含代码]
- UIView中的drawRect方法
- awk 正则表达式、正则运算符详细介绍
- jquery ajax load
- FCLK/HCLK/PCLK的配置
- android实现主动推送小结
- shell中awk详解 (模式提取)
- FZOJ2102:Solve equation