1.从官网cocos下载最新版cocos2d-x-3.13.1,运行setup.py,配置cocos2dx运行环境变量。
2. 命令行新建工程: cocos new Test -l cpp -p cn.test
3. 用Android Studio打开Test目录中proj.android-studio工程,若出现提示更新按update。之后Open Module Settings
4. 编译程序运行,程序出现闪停。
5.编译NDK-JNI c++ so库文件。添加 Android NDK,配置build.gradle代码。
6 .proj.android-studio\app\build.gradle 最后添加代码:
import org.apache.tools.ant.taskdefs.condition.Os
//clean.dependsOn cleanNative
//call regular ndk-build(.cmd) script from app directory
task ndkBuild(type: Exec, dependsOn: 'copyResources') {
workingDir file('jni')
commandLine getNdkBuildCmd()
}
tasks.withType(JavaCompile) {
compileTask -> compileTask.dependsOn ndkBuild
sourceCompatibility = JavaVersion.VERSION_1_7
targetCompatibility = JavaVersion.VERSION_1_7
}
task cleanNative(type: Exec) {
workingDir file('jni')
commandLine getNdkBuildCmd(), 'clean'
}
task mydir {
doLast {
delete 'assets'
mkdir('assets')
}
}
task copyResources(dependsOn: 'mydir', type: Copy) {
from '../../Resources'
into 'assets'
}
def getNdkDir() {
if (System.env.ANDROID_NDK_ROOT != null)
return System.env.ANDROID_NDK_ROOT
Properties properties = new Properties()
properties.load(project.rootProject.file('local.properties').newDataInputStream())
def ndkdir = properties.getProperty('ndk.dir', null)
if (ndkdir == null)
throw new GradleException("NDK location not found. Define location with ndk.dir in the local.properties file or with an ANDROID_NDK_ROOT environment variable.")
println(ndkdir)
return ndkdir
}
def getNdkBuildCmd() {
def ndkbuild = getNdkDir() + "/ndk-build"
if (Os.isFamily(Os.FAMILY_WINDOWS))
ndkbuild += ".cmd"
println(ndkbuild)
return ndkbuild
}
7. build.gradle全部代码
apply plugin: 'com.android.application'
android {
compileSdkVersion 20
buildToolsVersion "22.0.1"
defaultConfig {
applicationId "cn.test"
minSdkVersion 10
targetSdkVersion 22
versionCode 1
versionName "1.0"
}
sourceSets.main {
java.srcDir "src"
res.srcDir "res"
jniLibs.srcDir "libs"
manifest.srcFile "AndroidManifest.xml"
assets.srcDir "assets"
}
signingConfigs {
release {
if (project.hasProperty("RELEASE_STORE_FILE")) {
storeFile file(RELEASE_STORE_FILE)
storePassword RELEASE_STORE_PASSWORD
keyAlias RELEASE_KEY_ALIAS
keyPassword RELEASE_KEY_PASSWORD
}
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
if (project.hasProperty("RELEASE_STORE_FILE")) {
signingConfig signingConfigs.release
}
}
}
//sourceSets.main.jni.srcDirs = []
//disable automatic ndk-build call, which ignore our Android.mk
}
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
compile project(':libcocos2dx')
}
task cleanAssets(type: Delete) {
delete 'assets'
}
task copyAssets(type: Copy) {
from '../../Resources'
into 'assets'
}
clean.dependsOn cleanAssets
preBuild.dependsOn copyAssets
import org.apache.tools.ant.taskdefs.condition.Os
//clean.dependsOn cleanNative
//call regular ndk-build(.cmd) script from app directory
task ndkBuild(type: Exec, dependsOn: 'copyResources') {
workingDir file('jni')
commandLine getNdkBuildCmd()
}
tasks.withType(JavaCompile) {
compileTask -> compileTask.dependsOn ndkBuild
sourceCompatibility = JavaVersion.VERSION_1_7
targetCompatibility = JavaVersion.VERSION_1_7
}
task cleanNative(type: Exec) {
workingDir file('jni')
commandLine getNdkBuildCmd(), 'clean'
}
task mydir {
doLast {
delete 'assets'
mkdir('assets')
}
}
task copyResources(dependsOn: 'mydir', type: Copy) {
from '../../Resources'
into 'assets'
}
def getNdkDir() {
if (System.env.ANDROID_NDK_ROOT != null)
return System.env.ANDROID_NDK_ROOT
Properties properties = new Properties()
properties.load(project.rootProject.file('local.properties').newDataInputStream())
def ndkdir = properties.getProperty('ndk.dir', null)
if (ndkdir == null)
throw new GradleException("NDK location not found. Define location with ndk.dir in the local.properties file or with an ANDROID_NDK_ROOT environment variable.")
println(ndkdir)
return ndkdir
}
def getNdkBuildCmd() {
def ndkbuild = getNdkDir() + "/ndk-build"
if (Os.isFamily(Os.FAMILY_WINDOWS))
ndkbuild += ".cmd"
println(ndkbuild)
return ndkbuild
}
8. 编译程序成功运行