android -- NDK 编译环境搭建

四、使用 ecclipse 编辑代码与编译

1、设定字体及颜色:windows->Prefrence点击Genral->Appearance->Colors and Fonts

2、导入工程代码

1.File->new->other…->Android->Android Project,next

2.可选择新建,也可以选择create project from existing example

3.选择后者,选择build target为Android 2.3

4.samples 下拉列表选择任意一个工程,finish

5.选中工程,右键->build project(如果没有,取消主菜单Project->build automaticly)

6.选中工程,右键->Android application(如果没有AVD设备则需要配置)

3、配置C/C++的编译器

1.右键单击项目名称,点击Properties,弹出配置界面,之后再点击Builders,弹出项目的编译工具列表,之后点击New,新添加一个编译器,点击后出现添加界面,选择Program,点击OK按钮

出现了添加界面,首先给编译配置起个名字,如:C_HelloJni_Builder

设置Location为<你cygwin安装路径>\bin\bash.exe程序,例如:C:\cygwin\bin\bash.exe,

设置Working Directory为<cygwin安装路径>\bin目录,例如:C:\cygwin\bin

设置Arguments为 --login -c “cd /cygdrive/c/NDK/android-ndk-r7/samples/hello-jni && $NDK/ndk-build”

$NDK是之前配置的ndk的环境变量,这两个根据你具体的安装目录进行配置,其他的不用变,Arguments这串参数实际是给bash.exe命令行程序传参数,进入要编译的程序目录,然后运行ndk-build编译程序

对于NDK_Builder的参数时可以设定如下:

–login -c “cd ‘${project_loc}’ && $NDK/ndk-build”

每个工程都需要配置一次,主要是参数需要变更。

2.对于以上的Edit Configuration中有四个选项框,自行进行配置:

【Main】 【Refresh】 【Environment】 【Build Options】

配置保存完成,如果你配置的编译器在其它编译器下边,记得一定要点Up按钮,把它排到第一位,否则C代码的编译晚于Java代码的编译,会造成你的C代码要编译两次才能看到最新的修改

4、编译及清除中间文件

清除: project->Clean…-> 这里有两个选择框 Clean all projects & Clean projects selected below选中需要清除的项目

编译:项目名称右键单击,选择 Build Project

运行:Run as/Debug As -> Android Project 即可运行,需要在盒子上运行,则首先利用adb connect target_ip 然后再运行

默认情况下,NDK的编译系统会按”armeabi”ABI生成机器代码。若想生成其他类型的机器代码 eg:x86  mips

只需修改application.mk中的 APP_ABI 即可。

关于application.mk的介绍如下:

配合android.mk 使用的make 文件还有一个application.mk ,大部分情况无需修改该文件,下面也来自网络翻译

Application.mk文件

简介:

—————————–

要将C\C++代码编译为SO文件,光有Android.mk文件还不行,还需要一个Application.mk文件。

本文档是描述你的Android应用程序中需要的本地模块的Application.mk的语法使用,要明白如下。

Application.mk目的是描述在你的应用程序中所需要的模块(即静态库或动态库)。

Application.mk文件通常被放置在 P R O J E C T / j n i / A p p l i c a t i o n . m k 下, PROJECT/jni/Application.mk下, PROJECT/jni/Application.mk下,PROJECT指的是您的项目。

另一种方法是将其放在顶层的子目录下:

$NDK/apps目录下,例如:

$NDK/apps//Application.mk

是一个简称,用于描述你的NDK编译系统的应用程序(这个名字不会生成共享库或者最终的包)

下面是Application.mk中定义的几个变量。

APP_PROJECT_PATH

这个变量是强制性的,并且会给出应用程序工程的根目录的一个绝对路径。这是用来复制或者安装一个没有任何版本限制的JNI库,从而给APK生成工具一个详细的路径。

APP_MODULES

这个变量是可选的,如果没有定义,NDK将由在Android.mk中声明的默认的模块编译,并且包含所有的子文件(makefile文件)

如果APP_MODULES定义了,它不许是一个空格分隔的模块列表,这个模块名字被定义在Android.mk文件中的LOCAL_MODULE中。注意NDK会自动计算模块的依赖

注意:NDK在R4开始改变了这个变量的行为,再次之前:

- 在您的Application.mk中,该变量是强制的

- 必须明确列出所有需要的模块

APP_OPTIM

这个变量是可选的,用来定义“release”或”debug”。在编译您的应用程序模块的时候,可以用来改变优先级。

“release”模式是默认的,并且会生成高度优化的二进制代码。”debug”模式生成的是未优化的二进制代码,但可以检测出很多的BUG,可以用于调试。

注意:如果你的应用程序是可调试的(即,如果你的清单文件中设置了android:debuggable的属性是”true”)。默认的是”debug”而不是”release”。这可以通过设置APP_OPTIM为”release”来将其覆盖。

注意:可以在”release”和”debug”模式下一起调试,但是”release”模式编译后将会提供更少的BUG信息。在我们清楚BUG的过程中,有一些变量被优化了,或者根本就无法被检测出来,代码的重新排序会让这些带阿弥变得更加难以阅读,并且让这些轨迹更加不可靠。

APP_CFLAGS

当编译模块中有任何C文件或者C++文件的时候,C编译器的信号就会被发出。这里可以在你的应用中需要这些模块时,进行编译的调整,这样就不许要直接更改Android.mk为文件本身了

重要警告:+++++++++++++++++++++++++++++++++++++++++++++++ + +

+ 在这些编制中,所有的路径都需要于最顶层的NDK目录相对应。

+ 例如,如果您有以下设置:

+sources/foo/Android.mk

+sources/bar/ Android.mk

+ 编译过程中,若要在foo/Android.mk中指定你要添加的路径到bar源代码中,

+ 你应该使用

+ APP_CFLAGS += -Isources/bar

+ 或者交替:

+ APP_CFLAGS += -I $(LOCAL_PATH )/…/bar

+ 使用’-l…/bar/’将不会工作,以为它将等同于”-l$NDK_ROOT/…/bar”

++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++

注意:在Android的NDK 1.5_r1,只适用于C源文件,而不适合C++。

这已得到纠正,以建立完整相匹配的Andr​​oid系统。

APP_CXXFLAGS

APP_CPPFLAGS的别名,已经考虑在将在未来的版本中废除了

APP_CPPFLAGS

当编译的只有C++源文件的时候,可以通过这个C++编译器来设置

注意:在Android NDK-1.5_r1中,这个标志可以应用于C和C++源文件中。并且得到了纠正,以建立完整的与系统相匹配的Android编译系统。你先可也可以使用APP_CFLAGS来应用于C或者C++源文件中。

建议使用APP_CFLAGS

APP_BUILD_SCRIPT

默认情况下,NDK编译系统会在$(APP_PROJECT_PATH)/jni目录下寻找名为Android.mk文件:

$(APP_PROJECT_PATH)/jni/Android.mk

如果你想覆盖此行为,你可以定义APP_BUILD_SCRIPT来指定一个备用的编译脚本。一个非绝对路径总是被解释为相对于NDK的顶层的目录。

APP_ABI

默认情况下,NDK的编译系统回味”armeabi”ABI生成机器代码。喜爱哪个相当于一个基于CPU可以进行浮点运算的ARMv5TE。你可以使用APP_ABI来选择一个不同的ABI。

比如:为了在ARMv7的设备上支持硬件FPU指令。可以使用

APP_ABI := armeabi-v7a

或者为了支持IA-32指令集,可以使用

APP_ABI := x86

或者为了同时支持这三种,可以使用

APP_ABI := armeabi armeabi-v7a x86

APP_STL

默认情况下,NDK的编译系统为最小的C++运行时库(/system/lib/libstdc++.so)提供C++头文件。

然而,NDK的C++的实现,可以让你使用或着链接在自己的应用程序中。

例如:

APP_STL := stlport_static    –> static STLport library

APP_STL := stlport_shared    –> shared STLport library

APP_STL := system            –> default C++ runtime library

下面是一个Application.mk文件的示例:

APP_PROJECT_PATH :=

最后

简历首选内推方式,速度快,效率高啊!然后可以在拉钩,boss,脉脉,大街上看看。简历上写道熟悉什么技术就一定要去熟悉它,不然被问到不会很尴尬!做过什么项目,即使项目体量不大,但也一定要熟悉实现原理!不是你负责的部分,也可以看看同事是怎么实现的,换你来做你会怎么做?做过什么,会什么是广度问题,取决于项目内容。但做过什么,达到怎样一个境界,这是深度问题,和个人学习能力和解决问题的态度有关了。大公司看深度,小公司看广度。大公司面试你会的,小公司面试他们用到的你会不会,也就是岗位匹配度。

面试过程一定要有礼貌!即使你觉得面试官不尊重你,经常打断你的讲解,或者你觉得他不如你,问的问题缺乏专业水平,你也一定要尊重他,谁叫现在是他选择你,等你拿到offer后就是你选择他了。

另外,描述问题一定要慢!不要一下子讲一大堆,慢显得你沉稳、自信,而且你还有时间反应思路接下来怎么讲更好。现在开发过多依赖ide,所以会有个弊端,当我们在面试讲解很容易不知道某个方法怎么读,这是一个硬伤…所以一定要对常见的关键性的类名、方法名、关键字读准,有些面试官不耐烦会说“你到底说的是哪个?”这时我们会容易乱了阵脚。正确的发音+沉稳的描述+好听的嗓音决对是一个加分项!

最重要的是心态!心态!心态!重要事情说三遍!面试时间很短,在短时间内对方要摸清你的底子还是比较不现实的,所以,有时也是看眼缘,这还是个看脸的时代。

希望大家都能找到合适自己满意的工作!

进阶学习视频

附上:我们之前因为秋招收集的二十套一二线互联网公司Android面试真题 (含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。)


《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》点击传送门,即可获取!
1714382377619)]

附上:我们之前因为秋招收集的二十套一二线互联网公司Android面试真题 (含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。)

[外链图片转存中…(img-MMvX55BF-1714382377622)]
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》点击传送门,即可获取!

  • 27
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值