【Android开发】NDK开发(1)-Hello World!

上半年,公司的一个项目,本身我是不喜欢Android开发的,但是学习到的东西总需要整理一下。


从iOS转到Android,真心有些不习惯。就IDE来说,eclipse比Xcode差的不是一点半点。Android模拟器竟然还要开机!我勒个去。。

今天写个最简单的Android NDK的小栗子。
首先,什么是Android NDK? NDK 全称是:Native Development Kit,其他的,移步百度百科:android ndk_百度百科
1、新建一个Android Application Project,Fuck。
2、新建类 Fuck,声明本地静态方法:numFromFuck()。代码如下:
 1 package com.example.fuck;
 2 public class Fuck {
 3 
 4     public native static int numFromFuck();
 5 
 6     static{
 7 
 8         System.loadLibrary("fuck");    //fuck代表动态链接库libfuck.so文件
 9 
10     }
11 
12 }

3、给程序添加一个按钮button,在点击button时,通过调用类Fuck中本地方法更改textView的text,代码如下

 

 1 button.setOnClickListener(new OnClickListener(){
 2     @Override
 3 
 4     public void onClick(View arg0) {
 5 
 6         // TODO Auto-generated method stub
 7 
 8         textView.setText(Fuck.numFromFuck() + "");
 9     }
10 });

 

 

 

4build该工程,生成 Fuck.class 类文件(在bin目录下),这一步比较重要。

5、在终端cd到工程目录下,新建个文件夹:【mkdir jni】(终端输入命令都在中括号中,下同),然后输入命令:【javah -classpath bin/classes -d jni com.example.fuck.Fuck】 ,
然后会在jni文件夹下发现一个文件:com_example_fuck_Fuck.h,其中代码如下:
 1 /* DO NOT EDIT THIS FILE - it is machine generated */
 2 #include <jni.h>
 3 
 4 /* Header for class com_example_fuck_Fuck */
 5 
 6 #ifndef _Included_com_example_fuck_Fuck
 7 
 8 #define _Included_com_example_fuck_Fuck
 9 
10 #ifdef __cplusplus
11 
12 extern "C" {
13 
14 #endif
15 
16 /*
17 
18  * Class:     com_example_fuck_Fuck
19 
20  * Method:    numFromFuck
21 
22  * Signature: ()I
23 
24  */
25 
26 JNIEXPORT jint JNICALL Java_com_example_fuck_Fuck_numFromFuck
27 
28   (JNIEnv *, jobject);
29 
30 #ifdef __cplusplus
31 
32 }
33 
34 #endif
35 
36 #endif

 

6、在 jni 目录中新建Fuck.c,实现5中生成的.h文件中的方法:
1 #include "com_example_fuck_Fuck.h"
2 JNIEXPORT jint JNICALL Java_com_example_fuck_Fuck_numFromFuck (JNIEnv *env, jobject obj)
3 
4 {
5 
6     return 42;
7 
8 }
如果你直接从.h文件拷过来的代码,一定要记得更改参数。

 

7、在 jni 文件目录中新建文件 Android.mk 文件:

1 LOCAL_PATH := $(call my-dir)
2 include $(CLEAR_VARS)
3 
4 LOCAL_MODULE    := fuck
5 
6 LOCAL_SRC_FILES := Fuck.c
7 
8 include $(BUILD_SHARED_LIBRARY)

LOCAL_MODULE:=fuck 表示要生成的so文件名为:libfuck.so,这就是在步骤2中需加载的动态链接库。

8、回到终端,cd 到工程目录,输入命令:【ndk-build】,没错的话会在工程目录 libs/armeabi 中生成文件:libfuck.so。
最后运行程序:
点击按钮button,textView的内容就会变成“42”。
over~
2014-03-08 
                                                           

转载于:https://www.cnblogs.com/youthpasses/p/3844967.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/448011.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

每天30分钟:成功有效的学习方法

《每天坚持30分钟》&#xff0c;是一本讲述学习方法、提高学习效率的畅销书&#xff0c;作者&#xff1a;古市幸雄&#xff0c;日本销量50万余册&#xff0c;专为没有学习习惯的人而写。 《每天坚持30分钟》摘录 第一章 只有学习才能成功 1、有“学习意识”时&#xff0c;学习欲…

修改 input 框里的字体、颜色

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 /* WebKit browsers */ input::-webkit-input-placeholder {color: #C0C0C0;font-size: 14px; } /* Mozilla Firefox 4 to 18 */ input…

Easyjs 细说Javascript里的 闭包(Closure)

要成为高级 JavaScript 程序员&#xff0c;就必须理解闭包。闭包有时你非用她不可&#xff0c; 所有理解闭包还是必要的。笔者通过例子来说一下“闭包” 1.定义一个函数的代理&#xff1a; functiondelegate (fn, scope, args, append) { returnfunction/*匿名函数1*/(…

学习方法书籍 很好推荐

学习方法书籍&#xff1a;一《超级学习法》&#xff1a; 这是一种优秀的学习法。美国纽约华尔街10号的“超级记忆法有限公司”和保加利亚的罗扎诺夫学院都在推广这一种学习方法。日本长野吉田高中应用该方法使学生平均成绩提高20分&#xff0c;日本东海大学的关英男教授用这种方…

js 取两位小数

var totalPrice (product.unitPrice * product.nums).toFixed(2);转载于:https://www.cnblogs.com/yqlwl66/p/4155606.html

jQuery 实现表格与 ckeckbox 的全选、单选功能

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 功能点 1. 用户点击头的checkbox时&#xff0c;所有表格数据行的checkbox全选或反选。 当数据行某一行没有选中时&#xff0c;头check…

jquery checkbox 选中、改变状态、change 和 click 事件

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 jquery判断checked的三种方法: ​​​​​​​ .attr(checked); //看版本1.6返回:”checked”或”undefined” ;1.5-返回:true或false …

中医教你5个补肾护发食疗方

一个人的头发有10万到15万根&#xff0c;每根头发都有个毛囊&#xff0c;从毛囊里又生成毛球&#xff0c;长出头发。头发从长出到脱落&#xff0c;要经过3个周期&#xff0c;即成长期(约2&#xff5e;7年)、退缩期(约1个月)和休止期(约4个月)。 头发的生长速度和密度随年龄而变…

VUE:checkbox 单选框(单选、多选)、一选全选 / 全选一选、表格单选列实现

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1. 效果&#xff1a;如红框中部分。 一选全选&#xff1a;表头上的单选框选中则下面每行都选中。 全选一选&#xff1a;表中数据每行都…

我爱学习第一天(委托)

---恢复内容开始--- 1.delegate 一般用法 delegate void WriteValue(string vale);//申明一个委托,参数是string类型,无返回值static void Main(string[] args){WriteValue write new WriteValue(WriteLine);//实例化委托write("喝水");//调用Console.ReadKey();}pu…

怎样洗头使头发变黑变多

洗头法 头发变黑变粗--用淘米水洗头。每天煮饭时会产生淘米水&#xff0c;请将淘米水留下&#xff0c;装在一个容器内放上二天&#xff0c;让它自然发酵。然后用来洗头&#xff0c;三天洗一次&#xff0c;不出三个月&#xff0c;你的头发就会变粗、变黑。 发酵后的淘米水会有一…

VUE:父子组件间传参、子组件传值给父组件、父组件传值给子组件

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 Vue是一个轻量级的渐进式框架&#xff0c;对于它的一些特性和优点在此就不做赘述&#xff0c;本篇文章主要来探讨一下Vue子父组件通信的…

c1科目三考试技巧

起步平稳。转向灯不要错了。靠边要和路边平行。离边近量保持&#xff1a;30CM距离。车子在运行中。换档尽量保持利落。若道路比较复杂。看好路牌路标&#xff0c;不要违规。一般很容易过的。你不要紧张。晚上夜考灯光把好。一切很顺利的。祝你好运。 方法/步骤 紧记着“一灯二…

Astyle 一键格式化项目代码

代码格式化差异问题&#xff1a; 一个团队有多个开发&#xff0c;因开发习惯不同&#xff0c;开发时少添加了空格、换行等。 格式化代码时&#xff0c;一般会将整个文档格式化&#xff0c;代码提交时会发现未知的修改项。 Astyle格式化工具 官网下载地址&#xff1a;Artistic S…

浅谈 JavaScript、ECMAScript (ES5、ES6)是什么、相互关系

一、ECMAScript 和 JavaScript 的关系 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 ES6 ECMAScript6 从百度百科的资料上来看&#xff1a; ECMAScript是一种由Ecma国际通过ECMA-…

(2) MongoDB基本概念及与关系型数据库的对照

MongoDB不是关系型数据库&#xff0c;因此也就没有了表&#xff0c;行等概念&#xff0c;但是有一些类似的概念&#xff0c;主要有 数据库&#xff08;Database&#xff09;&#xff0c;集合&#xff08;Collection&#xff09;&#xff0c;文档&#xff08;Document&#xff0…

什么是 ES6 ?

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 ECMAScript 6&#xff08;以下简称ES6&#xff09;是JavaScript语言的下一代标准&#xff0c;已经在2015年6月正式发布了。Mozilla公司将…

史上最全换档讲解手动档汽车的换挡技巧

转个东东给大家看看&#xff0c;关于换档的。在网上已有很多讨论&#xff0c;涉及到的方面也林林总总。归纳一下的话&#xff0c;我觉得不外乎可以分为两 大类&#xff0c;一是换挡时机&#xff0c;即何时加档何时减档&#xff1b;二是换挡本身的操作&#xff0c;包括换挡时油门…

CorelDRAW X7 X8 2017 2018是什么关系?

从CorelDRAW 2017版本开始我们叫习惯了的X几系列的CorelDRAW毅然决然的就换了称呼&#xff0c;所以有时候很多朋友对于软件版本&#xff0c;经常会傻傻分不清&#xff0c;还有人认为X8版本比2017版本高&#xff0c;究竟为什么会这么认为呢&#xff1f; “帮我转个X8吧”。 “我…

阮一峰 《ECMAScript 6 入门》:let 和 const 命令

以下内容全文出自 阮一峰的书&#xff1a; 《ECMAScript 6 入门》 电子版地址&#xff1a;ES 6标准入门&#xff08;第3版&#xff09; let 命令 基本用法 ES6 新增了let命令&#xff0c;用来声明变量。它的用法类似于var&#xff0c;但是所声明的变量&#xff0c;只在let命令…