惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

I
Intezer
V
Vulnerabilities – Threatpost
Google Online Security Blog
Google Online Security Blog
T
The Exploit Database - CXSecurity.com
C
CXSECURITY Database RSS Feed - CXSecurity.com
AWS News Blog
AWS News Blog
G
GRAHAM CLULEY
P
Privacy & Cybersecurity Law Blog
www.infosecurity-magazine.com
www.infosecurity-magazine.com
C
Cybersecurity and Infrastructure Security Agency CISA
N
News | PayPal Newsroom
T
Tenable Blog
Spread Privacy
Spread Privacy
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
S
Secure Thoughts
P
Privacy International News Feed
IT之家
IT之家
Project Zero
Project Zero
T
The Blog of Author Tim Ferriss
Engineering at Meta
Engineering at Meta
大猫的无限游戏
大猫的无限游戏
博客园_首页
GbyAI
GbyAI
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
量子位
雷峰网
雷峰网
Apple Machine Learning Research
Apple Machine Learning Research
Hacker News: Ask HN
Hacker News: Ask HN
Google DeepMind News
Google DeepMind News
MongoDB | Blog
MongoDB | Blog
N
Netflix TechBlog - Medium
Martin Fowler
Martin Fowler
NISL@THU
NISL@THU
I
InfoQ
D
DataBreaches.Net
有赞技术团队
有赞技术团队
K
Kaspersky official blog
Security Latest
Security Latest
The Register - Security
The Register - Security
Hugging Face - Blog
Hugging Face - Blog
S
Security @ Cisco Blogs
P
Proofpoint News Feed
M
MIT News - Artificial intelligence
H
Hackread – Cybersecurity News, Data Breaches, AI and More
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
AI
AI
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
P
Proofpoint News Feed
Security Archives - TechRepublic
Security Archives - TechRepublic
N
News and Events Feed by Topic

博客园 - 和尚释然

AsyncTask原理 Android 模拟器截图 Android NDK开发之环境搭建 [原创]深入了解Activity生命周期 附源码 [原创]关于Android Service的示例编程 附源码 [原创]Android Camera 开发之实现一 附源码 [原创]Android Camera 开发之前言 [原创]在Eclipse中手工安装SVN Plugin Android开发环境搭建四:新建一台Android Virtual Device Android开发环境搭建三:在Eclipse配置Android SDK Android开发环境搭建二:安装ADT[新版本ADT15.0] Android开发环境搭建一:安装Android JDK Java开发环境配置图解 用Reflector反编译 Mobile Winform程序 Mobile WiFi的开启和关闭代码实现 VS2005/VS2008英文版应用程序无法显示中文字符 深入讲解main()返回值研究 用VisualStudio2008汇编代码 发布MFC ActiveX控件并实现自动更新
[原创]Android NDK开发之HelloWorld 附源码
和尚释然 · 2012-07-04 · via 博客园 - 和尚释然

2012-07-04 22:12  和尚释然  阅读(2364)  评论()    收藏  举报

一、新建Android Project.

打开我们的Eclipse新建一个Android Project,名为"NDK_Sample_HelloWorld".

SNAGHTML252e12[4]

选择Android Target为Android 2.3.3

SNAGHTML25f9d9

将Activity重命名为"AndroidNDKSample".

SNAGHTML62a18d[4]

添加"jni"相关目录及文件.

1. 添加jni文件夹

在我们新建的工程中新建一个名为"jni"文件夹.这个文件夹就是用来存放原生态"C/C++"的源码的地方.我们make的时候Cygwin就是编译这个文件夹.

2. 添加Android.mk文件

在"jni"文件夹里新建一个"Android.mk"文件.一个快捷并且保险的方法,就是从Android NDK自带的Samples中拷贝一个Android.mk文件到我们的工程中.

Android.mk的内容如下:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := nativie
LOCAL_SRC_FILES := myNative.c

include $(BUILD_SHARED_LIBRARY)

大家需要修改的地方就是上面蓝色粗体的代码.这里笔者简单介绍一下这几个配置选项的作用.

LOCAL_MODULE:  要生成的库名,即在java类应用时的名称.

LOCAL_SRC_FILES:   库对应的源文件,在jni文件夹下的C/C++的名称.

3. 添加C/C++文件

在"jni"文件夹里新建一个"myNative.c"文件,就是上面"Android.mk"文件中配置的C/C++文件.

myNative.c的内容如下:

#include <string.h>
#include <jni.h>

jstring Java_com_gel_ndk_AndroidNDKSample_stringFromJNI(JNIEnv* env, jobject thiz) {
    return (*env)->NewStringUTF(env, "Hello World of NDK !");
}

编译"jni"文件夹.

1. 运行Cygwin.

2. 通过cd命令到我们刚才创建的工程目录的"jni"文件夹下.然后输入$NDKROOT/ndk-build进行编译.编译成功会如下显示.

SNAGHTML4ca3be

3. 编译成功,按F5进行刷新.这时会多出"obj"和"libs"文件夹.

SNAGHTML512de4

编写Java代码.

1. Activity代码:

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class AndroidNDKSample extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        TextView NDKText = (TextView)findViewById(R.id.txtTitle);
        NDKText.setText(stringFromJNI());
    }
   
    public native String  stringFromJNI();
   
    static {
        System.loadLibrary("native");
    }
}

2. main.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android%22
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/txtTitle"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/hello" />

</LinearLayout>

运行程序.

运行成功的界面如下:

SNAGHTML64d9eb

源码下载:

http://download.csdn.net/detail/guenli/4411048

笔者也是Android NDK初学者,希望这篇文章能起到抛砖引玉.如果有什么疑问,也请留言.大家共同交流,共同进步.

如果有什么不对的地方欢迎指正.谢谢!