Android手机游戏开发设计实践活动之NDK与JNI开发设

摘要: 文中的文件目录以下: 1、自然环境构建 2、建立一个适用C/C++的新项目 2.1 在建新项目 2.2 拓展目前新项目 3、AndroidStudio与Gradle 3.1 project/build.gradle 3.2 project/settings.gradle 3.3 module/build.gra...

文中的文件目录以下:

1、自然环境构建 2、建立一个适用C/C++的新项目 2.1 在建新项目 2.2 拓展目前新项目 3、AndroidStudio与Gradle 3.1 project/build.gradle 3.2 project/settings.gradle 3.3 module/build.gradle 1、 自然环境构建

要让AndroidStudio适用NDK开发设计,除开需安裝AndroidStudio2.2之上的版本号。还得安裝NDK、CMake、LLDB等专用工具。
在AndroidStudio选中择Tools- Android- SDK Manager- SDK Tools。如图所示:

这儿简易详细介绍下:
NDK:是Android开发设计当地C/C++编码的一套专用工具集。
CMake:一套混合开发的搭建专用工具,能够Gradle脚本制作相互配合应用来搭建你的当地库。在AndroidStudio中,Google默认设置和强烈推荐应用CMake开展编译程序,自然,你依然能够再次应用ndk-build来编译程序你的当地编码。留意:32位的实际操作系统软件将会会装不了。
LLDB: 一种调节器,Android Studio中可使用它来调节当地编码。

2、 建立一个适用C/C++的新项目

这儿常说的建立一个适用C/C++的新项目,能够了解为建立一个NDK新项目,但又包括二种方法,各自是以零刚开始在建一个适用C/C++开发设计的新项目与在原来新项目的基本上让它适用C/C++开发设计。下边对这二种方法各自开展表明下。

2.1 在建新项目

假如安裝好啦,上边详细介绍的好多个专用工具(关键是NDK),而且AndroidStudio2.2之上的版本号,在建新项目的情况下,会见到这一选择项。如图所示:

建立新项目时,启用C++适用。


新项目中常用的C++规范能够挑选默认设置或是适用C++11,及其是不是适用出现异常和rtti特点。


建立完新项目,会比一一样的Android新项目空出cpp文件目录及其CMakeLists.txt的文档。


这儿特定NDK的相对路径。即,上边自然环境构建里安裝的ndk,会免费下载到AndroidStudio网站根目录下的ndk-bundle文档夹中。


make一下当今初创建的工程项目,默认设置会在build/cmake/debug/obj/下转化成相对的动态性库。

2.2 拓展目前新项目

要让目前的Android新项目会调用当地C/C++编码或是适用C/C++开发设计,只必须在原先新项目的基本略加改动就可以。流程以下:

转换到project主视图,开启module即图中的app控制模块,在src/main下鼠标右键New- Directory,填好一个文档名,比如:cpp。


在刚建的cpp相对路径下,鼠标右键New- C/C++ Source File,键入文档名,若要一并转化成相对的.h文档,启用Create an associated header选择项就可以。留意,后边能够特定源代码的后缀名,比如:.cxx,.hxx。


在module的网站根目录即图中的app网站根目录,鼠标右键New- File,键入CMakeLists.txt。留意:文档名务必为CMakeLists.txt


在module的网站根目录即图中的app网站根目录,挑选Link C++ Project with Gradle,随后,寻找刚建立的CMakeLists.txt文档。将CMakeLists.txt关系到新项目中。留意,Build System仍能够挑选ndk-build方法开展编译程序。

自然,这步实际操作还可以手动式进行,非常于在当今module下的build.gradle脚本制作中,加上了以下编码,

XML/HTML编码 android {   //特定应用CMake编译程序----------------   externalNativeBuild {   cmake {   path 'CMakeLists.txt'   }   }   //--------------------------------  } 
开启在建的CMakeLists.txt文档,键入以下编码:
XML/HTML编码 cmake_minimum_required (VERSION 3.4.1)    add_library (hellojni SHARED src/main/cpp/hellojni.cpp) 
各自特定CMake规定的版本号,add_library中主要参数各自是,特定转化成库的名字,转化成库的种类,默认设置是静态数据块,即: a,源代码的相对路径。这儿案例只简易详细介绍下CMake的使用方法,事后会出现专业一篇来详细介绍下CMake大量高級的使用方法。

之上结束,在make一下当今工程项目,或是rebuild一下,出不来出现意外会在build/intermediates/cmake/debug相对路径下转化成各种各样libhellojni.so文档。

3、AndroidStudio与Gradle

上边提及,将CMakeLists.txt关系到新项目中,会在build.gradle脚本制作中,加上一段编码就可以。将会刚触碰AndroidStudio(非常是应用其他IDE开发设计的,比如:eclipse等)对Gradle并不是很掌握,这儿就毛遂自荐下,扼要叙述下gradle脚本制作的应用。

最先,AndroidStudio是根据IntelliJ IDEA的IDE,在AndroidStudio中澳建立的Android工程项目都形如以下构造:

XML/HTML编码 MyApp  ├── build.gradle  ├── settings.gradle  └── app   ├── build.gradle   ├── build   ├── libs   └── src   └── main   ├── java   │ └──&.package.myapp   └── res   ├── drawable   ├── layout   └── etc. 
MyApp是新项目名,app是控制模块名,一个新项目下能够包括多个个控制模块。这与eclipse的构造不一样,相匹配到eclipse中,app就非常于新项目名,MyApp非常于工作中室内空间。或是相近于VS中处理计划方案与新项目的关联。之上文件目录构造关联,其实不与具体硬盘上的文件目录构造相匹配。能看到,在新项目网站根目录下为及控制模块文件目录下,各自有三个.gradle文档。下边,就各自详细介绍这三个gradle脚本制作的主要用途,自然这儿关键说的是在AndroidStudio下的gradle的有关应用。

在AndroidStudio中android新项目是根据gradle开展搭建的(eclipse中可使用ant来做相近的工作中),而gradle是一种根据Groovy語言的DSL(domain-specific language,行业专用型語言),而Groovy也是一种根据JVM的动态性語言。因此,有java基本得话,了解Groovy会更非常容易。相关Gradle文本文档能看看这一:current/dsl/

3.1 project/build.gradle

该build.gradle坐落于新项目的网站根目录,该文档是界定在这里个工程项目下的全部控制模块的公共性特性。默认设置以下:

XML/HTML编码 // Top-level build file where you can add configuration mon to all sub-projects/modules.    buildscript {   repositories {   jcenter()   }   dependencies {   classpath 'com.android.tools.build:gradle:2.2.3'     // NOTE: Do not place your application dependencies here; they belong   // in the individual module build.gradle files   }  }    allprojects {   repositories {   jcenter()   }  }    task clean(type: Delete) {   delete rootProject.buildDir  } 
下列仅仅从现象表明下,但本质是Groovy相对的数据信息构造(闭包,Map等)启用相对方式来动态性操纵全部搭建全过程。相关Groovy的探讨能看看3.3 module/build.gradle。
buildscript:界定了全局性的有关特性。
repositories:界定了远程控制库房的源,即意味着你的依靠包的来源于。这儿将jcenter()做为库房。
dependencies:界定了android gradle plugin的版本号。
allprojects:能够用于界定每个控制模块的默认设置特性,你可以以不但仅局限性于默认设置的配备,将来你可以以自身造就tasks在allprojects方式身体,这种tasks可能在全部控制模块中由此可见。
task clean:实行有关的清除每日任务。
3.2 project/settings.gradle

该文档坐落于新项目网站根目录下,也是新项目的全局性配备文档,该文档的內容以下:

include ':app'

假如,你的新项目中有好几个控制模块时,能够先后加上到该文档中。比如:

include ':app',':librarys:Mylibrary'

即在新项目网站根目录下的librarys文件目录里有一个Mylibrary库工程项目。

3.3 module/build.gradle

该文档坐落于当今控制模块的网站根目录下,一般状况下,该文档只对当今控制模块起功效。比如:

XML/HTML编码 apply plugin: 'com.android.application'    android {  &pileSdkVersion 24   buildToolsVersion  24.0.2    defaultConfig {   applicationId  com.alphagl.test    minSdkVersion 19   targetSdkVersion 24   versionCode 1   versionName  1.0    }   buildTypes {   release {   minifyEnabled false   proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'   }   }     externalNativeBuild {   cmake {   path 'CMakeLists.txt'   }   }  }    dependencies {  &pile fileTree(dir: 'libs', include: ['*.jar'])  &pile 'com.android.pat-v7:24.2.1'  } 
之上內容,要完全搞清楚,得细究下Groovy英语的语法。这儿,只浅谈下。
apply plugin: 'com.android.application':在Groovy中的启用为project.apply([plugin: 'com.android.application']),plugin: 'com.android.application会被做为一个Map主要参数传送给apply的方式。这儿是要将该控制模块搭建为一个运用,若要将控制模块搭建库方式,能够传参为plugin: 'com.android.library。

在Groovy中花括弧包括的一部分称之为一个闭包(Closure)。上边的关键两台分android和dependencies,各自相匹配project中的方式,而主要参数是相对的闭包构造。根据上边的构造,能够了解该闭包构造也有闭包嵌套循环和相对的方式。
android:pileSdkVersion和buildToolsVersion。
compileSdkVersion:该方式包括编译程序该app情况下,应用到的api版本号。
buildToolsVersion:该方式包括搭建专用工具的版本号号。
defaultConfig:该方式包括app的关键特性,该特性会遮盖在AndroidManifest.xml中的相匹配特性。
applicationId:该方式界定的特性会遮盖AndroidManifest文档中的包名package name特性。
minSdkVersion:该方式界定的特性表明最少适用api版本号。同AndroidManifest中相匹配的特性。
targetSdkVersion:该方式界定的特性表明总体目标服务平台api版本号。同AndroidManifest中相匹配的特性。
buildTypes:该方式界定了搭建不一样版本号的app有关的特性。
release:配备release版本号有关的特性。
minifyEnabled:是不是开展搞混。
proguardFiles:界定搞混文档的部位。根据getDefaultProguardFile方式获得。
externalNativeBuild:native应用cmake编译程序。
dependencies:gradle默认设置的特性之一,界定了全部的依靠包。
compile:编译程序相对依靠的jar包。机构名,包名,版本号号的构造。

之上只简易的例举了下边所属性,对gradle脚本制作有基本的掌握。自然,Groovy在java行业還是有许多运用的。很感兴趣的,能够深层次掌握下。

Groovy文本文档:
Groovy-Documentation


创作者:AlphaGL
出處:alphagl/

Android手机游戏开发设计实践活动之NDK与JNI开发设计02 (:31)

Android手机游戏开发设计实践活动之NDK与JNI开发设计01 (:39)

Android Studio下NDK开发设计该怎样配备 (:42)

Android提升21篇之十六:应用NDK把彩图变换为灰度值图 (:50)

指令行下应用Android NDK交叉式编译程序专用工具的方式 (:18)

cocos2d-x Android ndk-gdb真机调节自然环境构建 (:11)

《Android运用特性提升》 (:5)

Android开发设计自然环境中的定义和专用工具详细介绍 (:25)

Windows系统软件下配备Android NDK开发设计自然环境 (:55)

Mac下配备Eclipse+Android NDK+Cocos2d-x开发设计自然环境 (:45)


网页链接(选填)

认证(*)

文章正文(*)(留言板留言最多篇幅:1000)

记牢我,下一次回应时无需再次键入本人信息内容



联系我们

全国服务热线:4000-399-000 公司邮箱:343111187@qq.com

  工作日 9:00-18:00

关注我们

官网公众号

官网公众号

Copyright?2020 广州凡科互联网科技股份有限公司 版权所有 粤ICP备10235580号 客服热线 18720358503

技术支持:公众号抽奖