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

2.2 增加现有项目

要让现有的Android项目能调用本地C/C++代码或许支持C/C++开发,只供给在原来项指标底子稍加修改即可。步骤如下:
图片 1
切换成project视图,打开module即上海体育场合的app模块,在src/main下右键New->Directory,填写3个文件名,例如:cpp

图片 2
在刚建的cpp路径下,右键New->C/C++ Source
File,输入文件名,若要一并转移对应的.h文件,勾选Create an associated
header选项即可。注意,前边能够钦定源文件的后缀,例如:.cxx,.hxx

图片 3
在module的根目录即上海体育场面的app根目录,右键New->File,输入CMakeLists.txt。注意:文件名必须为CMakeLists.txt

图片 4
在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文件。

MinGW安装

MinGW的安装步骤很不难。如图:
图片 5

图片 6

图片 7

图片 8
分别把mingw-developer-toolkitmingw32-basemingw32-gcc-g++msys-base标记下,其余的可选。

图片 9
在Installation->Apply Changes,应用下,就会自动安装所选的包了。

二 、 创立二个支撑C/C++的品种

此地所说的创建二个扶助C/C++的品种,能够知道为创造1个NDK项目,但又带有二种办法,分别是从零始发新建五个支撑C/C++开发的品类和在原始项目标基础上让它协理C/C++开发。下边对那两种艺术分别进行认证下。

MinGW介绍

MinGW全称Minimalist GNU for
Windows,也是从Cygwin发展而来的,但更容易。是一套将GCC和GNU
Binutils移植到Windows平台的编写翻译工具集。支持理编辑译C、C++、Objective-C、Fortran及艾达等语言(同时,也是GCC帮忙的语言)。同时,使用MinGW编译出来的主次不供给额外的第2方DLL就能间接在Windows下运作。以上介绍均来自MinGw维基百科,不难的话,正是提供了一套在Windows平台也能选拔GUN的工具。

MinGW官网:
http://www.mingw.org/

MinGW下载地址:
http://sourceforge.net/projects/mingw/

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会被看成3个Map参数字传送递给apply的办法。那里是要将该模块创设为3个选拔,若要将模块营造库方式,能够传参为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
出处:http://www.cnblogs.com/alphagl/
版权全数,欢迎保留原来的作品链接进行转载 🙂

布署环境变量

例如:我的MinGW安装在D:\env\MinGW。如图:
图片 10

图片 11

图片 12
并把MINGW_HOMEMINGW_MAKE_HOME添加到Path中。%MINGW_HOME%\bin;%MINGW_MAKE_HOME%\bin;

图片 13
在Windows终端中,输入gcc --versionmake --version,能出口相应的版本音讯,则证实配置成功了。

Android游戏开发执行(1)之NDK与JNI开发03

前方早已享受了两篇关于Android平台NDK与JNI开发有关的始末。以下列举前面两篇的链接地址,感兴趣的可以再回忆下。那么,那篇一连那几个小专题,主要分享下AndroidStudio下的NDK与JNI开发的连锁操作以及简述下CMake的采取。最终,会以多少个实例来收尾那么些小专题的享用,那多少个,就坐落最终一篇吧。

作者:AlphaGL。版权全数,欢迎保留原作链接举办转载:)

传送门:
Android游戏开发执行(1)之NDK与JNI开发01
Android游戏开发实践(1)之NDK与JNI开发02

正文的目录如下:

MinGW使用

新建hello_mingw.chello.hhello.cmakefile,代码如下:
hello_mingw.c

#include <stdio.h>
#include "hello.h"

int main()
{
  printf("hello mingw\n");
  test();
  return 0;
} 

hello.h

#include <stdio.h>

void test();

hello.c

#include "hello.h"

void test()
{
  printf("this is a test");
}

makefile

hello.exe:hello_mingw.o hello.o
    gcc hello_mingw.o hello.o -o hello

hello_mingw.o:hello_mingw.c
    gcc -c hello_mingw.c

hello.o:hello.c hello.h
    gcc -c hello.c

clean:
    rm *.exe *.o

在Windows命令终端中实行如下命令:
图片 14
至此成功生成hello.exe,运维并履行了不利的输出。

如上就是借助MinGW来熟稔gcc以及makefile的运用的三个小实践。后续还有越多关于gcc相关的始末分享,敬请期待。

技术调换QQ群:528655025
作者:AlphaGL
出处:http://www.cnblogs.com/alphagl/
版权全数,欢迎保留原著链接实行转发 🙂

2.1 新建项目

假设设置好了,上边介绍的多少个工具(首固然NDK),并且AndroidStudio2.2之上的本子,新建项目标时候,会看到那么些选项。如图:
图片 15
创办项目时,勾选C++帮衬。

图片 16
类型中所用的C++标准能够选用暗中同意也许帮助C++11,以及是不是协助越发和rtti特性。

图片 17
创办完项目,会比一般的Android项目多出cpp目录以及CMakeLists.txt的文书。

图片 18
那边钦命NDK的途径。即,上边环境搭建里设置的ndk,会下载到AndroidStudio根目录下的ndk-bundle文本夹中。

图片 19
make一下当下新创设的工程,默许会在build/cmake/debug/obj/下转移对应的动态库。

GCC学习(1)之MinGW使用

因为再而三打算分享部分有关GCC的运用体验的稿子,就把此篇当作三个小预热,依此来询问下采纳GNU工具链(gcc、gdb、make等)在退出IDE的情况下什么支付以及涉嫌的编译相关的规律。当然,那下边包车型地铁剧情开发环境不压制使用MinGW,像在此之前介绍过的Cygwin,也许直接在Linux类别的操作系统上,一般都自带GUN工具。

作者:AlphaGL。版权全体,欢迎保留最初的作品链接进行转发:)

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等)调用相应措施来动态控制整个营造进程。有关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库工程。

壹 、 环境搭建

要让AndroidStudio辅助NDK开发,除了需安装AndroidStudio2.2之上的版本。还得设置NDKCMakeLLDB等工具。
在AndroidStudio中选择Tools->Android->SDK Manager->SDK
Tools。如图:
图片 20

此地差不离介绍下:
NDK:是Android开发本土C/C++代码的一套工具集。
CMake:一套跨平台的营造筑工程具,能够Gradle脚本合作使用来构建你的当地库。在AndroidStudio中,Google私下认可和推荐使用CMake实行编写翻译,当然,你照旧能够接二连三选用ndk-build来编写翻译你的本土代码。注意:三十几个人的操作系统也许会装不上。
LLDB: 一种调节和测试器,Android Studio中得以行使它来调节本地代码。

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文书档案能够看看那一个:
https://docs.gradle.org/current/dsl/

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图