当前位置:永利皇宫官网 > 永利集团游戏网址 > Android游戏开发实践(1)之NDK与JNI开发03

Android游戏开发实践(1)之NDK与JNI开发03

文章作者:永利集团游戏网址 上传时间:2019-12-18

Android游戏开荒施行(1卡塔尔之NDK与JNI开垦03

前方早就享受了两篇关于Android平台NDK与JNI开拓相关的内容。以下列举后边两篇的链接地址,感兴趣的能够再纪念下。那么,那篇三番两次那个小专项论题,首要分享下AndroidStudio下的NDK与JNI开采的有关操作甚至简述下CMake的采纳。最终,会以四个实例来终止那几个小专项论题的分享,那些,就坐落最终大器晚成篇吧。

作者:AlphaGL。版权全体,招待保留原来的书文链接举办转载:卡塔尔国

传送门:
Android游戏开辟施行(1卡塔尔(قطر‎之NDK与JNI开荒01
Android游戏开荒实践(1卡塔尔国之NDK与JNI开荒02

正文的目录如下:

  • 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上述的本子。还得设置NDKCMakeLLDB等工具。
在AndroidStudio中选择Tools->Android->SDK Manager->SDK Tools。如图:
图片 1

此间大概介绍下:
NDKAndroid游戏开发实践(1)之NDK与JNI开发03。:是Android开荒本土C/C++代码的黄金时代套工具集。
CMake:大器晚成套跨平台的创设筑工程具,能够Gradle脚本合营使用来创设你之处库。在AndroidStudio中,谷歌(Google卡塔尔国默许和推举使用CMake举行编写翻译,当然,你还是可以世袭行使ndk-build来编译你的地点代码。注意:34位的操作系统恐怕会装不上。
LLDB: 后生可畏种调节和测量检验器,Android Studio中得以接受它来调治本地代码。

2、 创造叁个支撑C/C++的项目

Android游戏开发实践(1)之NDK与JNI开发03。此处所说的创制三个支撑C/C++的连串,能够精晓为创造三个NDK项目,但又带有三种办法,分别是从零起始新建七个协理C/C++开采的类型和在原有项目标底蕴上让它援救C/C++开荒。下直面那三种方法分别展开说明下。

2.1 新建项目

生机勃勃旦设置好了,上边介绍的多少个工具(首假如NDK卡塔尔(قطر‎,何况AndroidStudio2.2上述的本子,新建项指标时候,拜候到这么些选项。如图:
图片 2
创建项目时,勾选C++援助。

图片 3
体系中所用的C++标准能够筛选暗中认可或然扶助C++11,以至是不是帮忙特别和rtti特性。

图片 4
成立完项目,会比日常的Android项目多出cpp目录以至CMakeLists.txt的文本。

图片 5
此处钦赐NDK的路径。即,上边境遇搭建里安装的ndk,会下载到AndroidStudio根目录下的ndk-bundle文件夹中。

图片 6
Android游戏开发实践(1)之NDK与JNI开发03。make一下脚下新创立的工程,暗中认可会在build/cmake/debug/obj/下转移对应的动态库。

2.2 扩充现成项目

要让现成的Android项目能调用本地C/C++代码也许支持C/C++开垦,只须求在原先项指标底子稍加改正就可以。步骤如下:
图片 7
切换来project视图,张开module即上海体育场合的app模块,在src/main下右键New->Directory,填写贰个文本名,比如:cpp

图片 8
在刚建的cpp路线下,右键New->C/C++ Source File,输入文件名,若要意气风发并转移对应的.h文本,勾选Create an associated header选项就可以。注意,前边可以钦点源文件的后缀,比方:.cxx,.hxx

图片 9
在module的根目录即上海教室的app根目录,右键New->File,输入CMakeLists.txt。注意:文件名必需为CMakeLists.txt

图片 10
在module的根目录即上海教室的app根目录,接纳Link C++ Project with Gradle,然后,找到刚创制的CMakeLists.txt文件。将CMakeLists.txt论及到项目中。注意,Build System还是能够选拔ndk-build方法进行编写翻译。

自然,这步操作也能够手动完结,相当于在这里时此刻module下的build.gradle脚本中,加多了之类代码,

android {
    //指定使用CMake编译----------------
    externalNativeBuild {
        cmake {
            path 'CMakeLists.txt'
        }
    }
    //--------------------------------
} 

开辟新建的CMakeLists.txt文本,输入如下代码:

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是依照英特尔liJ IDEA的IDE,在AndroidStudio中新创设的Android工程都形如如下构造:

MyApp  
├── build.gradle  
├── settings.gradle  
└── app  
    ├── build.gradle  
    ├── build  
    ├── libs  
    └── src  
        └── main  
            ├── java  
            │   └── com.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文书档案可以看看那几个:

3.1 project/build.gradle

该build.gradle位于项指标根目录,该文件是概念在此个工程下的具备模块的公物属性。私下认可如下:

// Top-level build file where you can add configuration options common 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等卡塔尔(英语:State of Qatar)调用相应措施来动态调节整个创设进程。有关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

该文件坐落于当前模块的根目录下,常常状态下,该公文只对当下模块起效果。比如:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 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 {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-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卡塔尔。下面的最首要两部分androiddependencies,分别对应project中的方法,而参数是对应的闭包布局。通过下边包车型客车结构,能够清楚该闭包构造还也会有闭包嵌套和呼应的方法。
android:该方法包罗了全数的Android属性,而唯风华正茂必需含有属性为compileSdkVersion和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

工夫调换QQ群:528655025
作者:AlphaGL
出处:
版权全部,招待保留原版的书文链接实行转发 :卡塔尔(英语:State of Qatar)

本文由永利皇宫官网发布于永利集团游戏网址,转载请注明出处:Android游戏开发实践(1)之NDK与JNI开发03

关键词: