NDK编制程序--鸟瞰

作者:操作系统

推介生机勃勃篇不错的手艺小说:NDK安卓*采取移植方法概述本指南用于援救开采人士将长存的基于ARM*的NDK应用移植到x86。倘令你已经怀有一个好端端运维的运用,需求了解哪些能够相当慢让x86设备在Android*Market中找到您的接受,本文将可认为你提供部分入门音信。同一时候本指南还提供了一些技艺和指南,以帮扶你消除在移植进程中或者会遇到的编写翻译器难题。详细音讯请点击:

基本概念

** NDK**:Native Development Kit,是朝气蓬勃多元工具的成团。能够把c/c ->编译成四个Linux下能够实施的二进制文件Java代码里面就可以透过jni调用实践二进制的文本。它提供了后生可畏连串的工具,辅助开采者连忙支付C/C 的动态库,并能自动将so和Java一齐打包成apk。
JNI:Java Native Interface,规范是java平台的风姿洒脱部分,JNI是Java语言提供的Java和C/C 相互沟通的体制。
so:shared object,即分享库,ELF(Executable and Linkable Format,在微型机科学中,是生龙活虎种用于二进制文件、可施行文件、目的代码、分享库和主导转储格式文件,是UNIX作为ABI而发布的可执行文件State of Qatar文件是Linux下的动态链接库,形似于Windows下的dll。生成so文件,重要透过GCC编写翻译将.c转成.o,然后经过GCC链接将.o转成.so。库文件分为动态库和静态库,.a为静态库。
ABI:Application Binary Interface,实际就是指应用程序基于哪类指令集来进展编写翻译,能用到的ABI 也就各类 armeabi,armeabi-v7a ,x86 和mips ,前双方是相比宽泛。

  • armeabi,默许选项,将创建以基于 ARM* v5TE 的设备为对象的库。 具备这种对象的浮点运算使用软件浮点运算。 使用此 ABI 创制的二进制代码将能够在具有 ARM* 设备上运转。
  • armeabi-v7a’成立扶助基于 ARM* v7 的设备的库,并将运用硬件 FPU 指令。
  • x86 生成的二进制代码可援救包蕴基于硬件的浮点运算的 IA-32 指令集.
  • mips 扶植采纳二进制接口

APP_ABI 正是为了交叉编写翻译生成对应集成电路可实行的命令集。直观的看正是风姿洒脱旦您将电脑软件_ABI := armeabi armeabi-v7a mips x86,那么android工程上边的 libs 里边会出现armeabi armeabi-v7a mips x86 这两个目录下会分别生成 4个.so文件。程序在Android手提式有线电话机运转时,依据手提式有线电话机自个儿CPU微电路不一样,去采取调用相应的.so文件。

Android.mk:向变化系统描述您的源代码

----------start----------
# Copyright (C) 2009 The Android Open Source Project
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
# http://www.apache.org/licenses/LICENSE-2.0
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE    := hello-jni
LOCAL_SRC_FILES := hello-jni.c
include $(BUILD_SHARED_LIBRARY)

----------end----------
//LOCAL_PATH := $(call my-dir)  给出当前文件的路径,my-dir返回当前Android.mk所在目录的路径  
//include $(CLEAR_VARS)  指定让GNU MAKEFILE为你清除许多LOCAL_XXX变量。CLEAR_VARS:指向一个编译脚本。这个必须在开始一个新模块之前包含  
//LOCAL_MODULE := hellojni_shared 这个模块的名字,它必须是唯一的,而且不能包含空格  
//LOCAL_MODULE_FILENAME := libhellojni 设置你的模块的二进制文件的名称,独立于LOCAL_MODULE  
//LOCAL_SRC_FILES := hellocpp/main.cpp  ../../Classes/AppDelegate.cpp
//include $(BUILD_SHARED_LIBRARY). BUILD_SHARED_LIBRARY表示编译生成共享库(动态库),是编译系统提供的变量,指向一个GNU Makefile脚本,负责收集自从上次调用'include $(CLEAR_VARS)'以来,定义在LOCAL_XXX变量中的所有信息,并且决定编译什么,如何正确地去做。

Application.mk:描述您的工程下的native模,日常在$PROJECT/jni/,那样能够被ndk-build脚本。这几个文件能够不写。

//1.指定application里要链接的标准c  库  
APP_STL := gnustl_static  
//2.编译选项  
APP_CPPFLAGS := -frtti -DCC_ENABLE_CHIPMUNK_INTEGRATION=1 -DCOCOS2D_DEBUG=1 

  

注:

什么情形下要求NDK

  • 种类必要调用底层的风流浪漫对C/C 的一些东西(java不能够直接待上访谈到操作系统]底层(如系统硬件等),须求在su上施行的脚本等气象),只怕使用成熟的C/C 开源库。NDK开拓常用来驱动开采、有线热门分享、数学运算、实时渲染的玩耍、音摄像管理、文件收缩、人脸识别、图片管理等。
  • 频率角度:将须要高质量的应用逻辑使用C/C 开辟,从而巩固应用程序的推行功效。然而C/C 代码尽管是全速的,在java与C/C 相互调用时却增大了付出;
  • 平安角度构思。防止代码被反编写翻译,为了安全起见,使用C/C 语言来编排主要的有的以增大系统的安全性,最终生成so库(用过第三方库的应有都不生分)便于给人提供方便。(任何有效的代码混淆对于会smail语法反编写翻译你apk是分分钟的事,固然你加壳也不能够制止高手的攻击)
  • 跨平台,便于移植。用C/C 写得库能够一本万利移植到别的嵌入式平台。

  有关Android Studio的使用方法和工夫,请下载摄像教程稳重观摩。

小心:以下多少个零构件只在运用 ndk-build 脚本构建时以致接收 ndk-gdb 脚本调节和测量试验时才供给

目录

  • 什么意况下需求NDK
  • 基本概念

  NDK r11 for Windows我国下载地址:

  • 自动探测您的支付种类和接受项目文件以鲜明要营造的从头到尾的经过;
  • 扭转二进制文件;
  • 将二进制文件复制到应用的花色路径。

操作系统,  JDK官方下载地址:

        如若四个库使用相同的签订公约完毕各自的点子,就能够爆发关系错误。

  相似,在设置NDK时,也将路线设置在和SDK、Android Studio同一目录下,以便迁移。

Google官方不推荐初读书人使用NDK举行开拓,NDK扩充了支付进程的复杂,对于绝大相当多的Android应用开垦以来并从未什么样卵用;

  能够由此设置代理,解决该难题,代理设置如下图所示。

分歧的 ABI 对应分歧的布局:NDK 蕴含对 ARMEABI(暗许)、MIPS 和 x86 的 ABI 扶助;

  因本国无法符合规律访谈谷歌(Google卡塔尔国网址,故在更新SDK时会出错,新闻如下:

Android NDK 是意气风发套允许你使用原生代码语言(比方 C 和 C )实现部分行使的工具集;

  Android Studio 1.5.1正规版360云盘下载地址: 访问密码 e29d

NDK多用于:

本文由ca88发布,转载请注明来源

关键词: Andro 指南 方法 详细信息 请点击