编译 cocos2d-x-3.13.1 程序:Android Studio (代码配置方法)

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. 编译程序成功运行




  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值