проект на базе cocos2dx в андроид-студии с использованием Gradle-экспериментального плагина

У меня есть файл build.gradle, совместимый с экспериментальной версией 0.6.0-alpha1:

apply plugin: 'com.android.model.application'

model {
android {
compileSdkVersion = 21
buildToolsVersion = "23.0.2"
defaultConfig.with {
applicationId = "com.company.application"minSdkVersion.apiLevel = 21
targetSdkVersion.apiLevel = 21
}
}
android.buildTypes {
release {
minifyEnabled = false
proguardFiles.add(file('proguard-rules.pro'))
}
}

android.ndk {
moduleName = "moduleName"}
}

dependencies {
compile project(':libcocos2dx')
}

И я использую cocos2dx в качестве двигателя. У меня есть иерархия папок, которая выглядит следующим образом:

  • Классы (которые содержат весь код C ++ моего проекта)
  • proj.android/src/main/projectName/jni (который содержит файл main.cpp для подключения cocos2d)

У меня также есть много других классов cpp, которые находятся в разных папках, кроме proj.android (например, файл cocos2d cpp находится на proj.android/../../../dependencies/XXXX/cocos2d-x и файлы движка находятся на proj.android/../../../dependencies/XXXX/engine, а весь мой код на C ++ — на proj.android/../Classes, как и в любом проекте cocos2dx)

Я пытаюсь создать свое приложение, используя последний экспериментальный плагин gradle (gradle-экспериментальный-0.6.0-alpha1).

Сначала я пытаюсь собрать его как есть, скомпилировать и запустить проект, но он был пустым (libMyApp.so не был сгенерирован), потому что я не включил исходный файл C ++ в сборку Gradle.

Затем я сделал символическую ссылку на папку с исходным файлом, чтобы gradle мог выбрать их:

ln -s proj.android/../../../dependencies/XXXX/cocos2d-x proj.android/src/main/projectName/jni

Теперь, когда я собираю (./gradlew assemblyDebug), я получаю компиляцию символически связанных файлов C ++, но каждый раз при первом включении заголовка происходит сбой, независимо от того, что я пытаюсь.

Я попытался добавить исходный файл / заголовок, как описано Вот с помощью:

android.sources {
main {
jni {
source {
srcDir "src"}
exportedHeaders {
srcDir "src"}
}
}
}

но я не смог найти пропавшие заголовки «.h». Если кто-то пытался построить последовательный проект C ++ с использованием cocos2Dx, gradle-экспериментальный и Android-Studio, пожалуйста, не стесняйтесь поделиться любым опытом. Я постараюсь составить какое-то руководство, когда смогу его скомпилировать (один день :))

для справки: последняя версия документа:

https://docs.gradle.org/2.9/userguide/nativeBinaries.html

полезная ссылка:

http://ph0b.com/new-android-studio-ndk-support/

0

Решение

Привет Спасибо за ваш файл, я сделал некоторые изменения для ваших файлов.

Я работаю тогда, я сделал это с cocos2Dx 3.9 на моем Mac OSX.

Вам нужно: com.android.tools.build:gradle-experimental:0.6.0-alpha5 ‘

Вы можете устанавливать точки останова в Java и C ++ одновременно.

Cyrl

import org.apache.tools.ant.taskdefs.condition.Os

apply plugin: 'com.android.model.library'

model {

repositories {
libs(PrebuiltLibraries) {
chipmunk {
headers.srcDir "../../../../external/chipmunk/include"binaries.withType(SharedLibraryBinary) {
//
// NOTE: this block should be "StaticLibraryBinary"/staticLibraryFile - but SharedLibraryBinary works and StaticLibraryBinary doesn't as of 0.6.0-alpha2
// bug reported here: https://code.google.com/p/android/issues/detail?id=196065
//
sharedLibraryFile = file("../../../../external/chipmunk/prebuilt/android/${targetPlatform.getName()}/libchipmunk.a")
}
}
freetype2 {
headers.srcDir "../../../../external/freetype2/include/android/freetype2"binaries.withType(SharedLibraryBinary) {
sharedLibraryFile = file("../../../../external/freetype2/prebuilt/android/${targetPlatform.getName()}/libfreetype.a")
}
}
curl {
headers.srcDir "../../../../external/curl/include/android/curl"binaries.withType(SharedLibraryBinary) {
sharedLibraryFile = file("../../../../external/curl/prebuilt/android/${targetPlatform.getName()}/libcurl.a")
}
}
png {
headers.srcDir "../../../../external/png/include/android"binaries.withType(SharedLibraryBinary) {
sharedLibraryFile = file("../../../../external/png/prebuilt/android/${targetPlatform.getName()}/libpng.a")
}
}
jpeg {
headers.srcDir "../../../../external/jpeg/include/android"binaries.withType(SharedLibraryBinary) {
sharedLibraryFile = file("../../../../external/jpeg/prebuilt/android/${targetPlatform.getName()}/libjpeg.a")
}
}
tiff {
headers.srcDir "../../../../external/tiff/include/android"binaries.withType(SharedLibraryBinary) {
sharedLibraryFile = file("../../../../external/tiff/prebuilt/android/${targetPlatform.getName()}/libtiff.a")
}
}
webp {
headers.srcDir "../../../../external/webp/include/android"binaries.withType(SharedLibraryBinary) {
sharedLibraryFile = file("../../../../external/webp/prebuilt/android/${targetPlatform.getName()}/libwebp.a")
}
}
bullet {
headers.srcDir "../../../../external/bullet/"binaries.withType(SharedLibraryBinary) {
sharedLibraryFile = file("../../../../external/bullet/obj/local/${targetPlatform.getName()}/libbullet.a")
}
}
recast {
headers.srcDir "../../../../external/recast/"binaries.withType(SharedLibraryBinary) {
sharedLibraryFile = file("../../../../external/recast/obj/local/${targetPlatform.getName()}/librecast.a")
}
}
websockets {
headers.srcDir "../../../../external/websockets/include/android"binaries.withType(SharedLibraryBinary) {
sharedLibraryFile = file("../../../../external/websockets/prebuilt/android/${targetPlatform.getName()}/libwebsockets.a")
}
}
ssl {
headers.srcDir "../../../../external/curl/include/android/curl"binaries.withType(SharedLibraryBinary) {
sharedLibraryFile = file("../../../../external/curl/prebuilt/android/${targetPlatform.getName()}/libssl.a")
}
}
crypto {
headers.srcDir "../../../../external/curl/include/android/curl"binaries.withType(SharedLibraryBinary) {
sharedLibraryFile = file("../../../../external/curl/prebuilt/android/${targetPlatform.getName()}/libcrypto.a")
}
}
}
}

android {
compileSdkVersion = 21
buildToolsVersion = "23.0.2"
defaultConfig.with {
minSdkVersion.apiLevel = 9
targetSdkVersion.apiLevel = 9
}
}

android.ndk {
moduleName = "cocos2dx"stl = "c++_static"cppFlags.add("-std=c++11")
cppFlags.add("-pthread")
cppFlags.add("-fexceptions")
cppFlags.add("-frtti")

CFlags.add("-DUSE_FILE32API")
CFlags.add("-fexceptions")

ldLibs.addAll(["atomic", "log", "android", "EGL", "GLESv2", "z"  ])
}

android.sources {
main {
manifest.source {
srcDir "."include "AndroidManifest.xml"}

jni {
source {
// INTERNAL CPP FILES
//srcDir "../../../../cocos/"// include only file at this level
srcDir "../../../../cocos/2d"srcDir "../../../../cocos/sourceFile"srcDir "../../../../cocos/3d"srcDir "../../../../cocos/math"srcDir "../../../../cocos/base"srcDir "../../../../cocos/platform/sourceFiles"srcDir "../../../../cocos/cpufeatures"// include only file at this level
srcDir "../../../../cocos/platform/android"srcDir "../../../../cocos/renderer"srcDir "../../../../cocos/deprecated"srcDir "../../../../cocos/physics"srcDir "../../../../cocos/physics3d"srcDir "../../../../cocos/navmesh"srcDir "../../../../cocos/network"srcDir "../../../../tests/cpp-empty-test/Classes"srcDir "../../../../tests/cpp-empty-test/Main"
// EXTERNAL CPP FILES
srcDir "../../../../external/ConvertUTF"srcDir "../../../../external/tinyxml2"srcDir "../../../../external/unzip"srcDir "../../../../external/edtaa3func"srcDir "../../../../external/poly2tri"srcDir "../../../../external/clipper"srcDir "../../../../external/xxhash"}

exportedHeaders {
// INTERNAL HEADERS
srcDir "../../../../cocos"srcDir "../../../../cocos/2d"srcDir "../../../../cocos/math"srcDir "../../../../cocos/base"srcDir "../../../../cocos/platform"srcDir "../../../../cocos/platform/android"srcDir "../../../../cocos/renderer"srcDir "../../../../cocos/deprecated"srcDir "../../../../cocos/physics"srcDir "../../../../cocos/physics3d"srcDir "../../../../cocos/navmesh"srcDir "../../../../tests/cpp-empty-test/Classes"

// EXTERNAL HEADERS
srcDir "../../../../external"srcDir "../../../../external/ConvertUTF"srcDir "../../../../external/tinyxml2"srcDir "../../../../external/unzip"srcDir "../../../../external/edtaa3func"srcDir "../../../../external/poly2tri"srcDir "../../../../external/poly2tri/common"srcDir "../../../../external/poly2tre/sweep"srcDir "../../../../external/clipper"srcDir "../../../../external/xxhash"

// STATIC LIBRARIES
srcDir "../../../../external/chipmunk/include/chipmunk"srcDir "../../../../external/freetype2/include/android/freetype2"srcDir "../../../../external/curl/include/android"srcDir "../../../../external/png/include/android"srcDir "../../../../external/tiff/include/android"srcDir "../../../../external/jpeg/include/android"srcDir "../../../../external/webp/include/android"srcDir "../../../../external/websockets/include/android"}

dependencies {
library "chipmunk"library "freetype2"library "curl"library "png"library "jpeg"library "tiff"library "webp"library "bullet"library "recast"library "websockets"library "ssl"library "crypto"}
}
}
}

android.buildTypes {
release {

}
debug {
ndk.with {
debuggable = true
}
}
}

android.productFlavors {
create ("arm") {
ndk.with {
abiFilters.add("armeabi-v7a")
ldFlags.addAll([
"-L${file("./obj/local/armeabi-v7a")}".toString()
])
}
}
create("x86") {
ndk.with {
abiFilters.add("x86")
ldFlags.addAll([
"-L${file("./obj/local/x86")}".toString()
])
}
}
}
}

task buildMkRecast(type: Exec) {
// Retrieve ndk dir
Properties properties = new Properties()
properties.load(project.rootProject.file('local.properties').newDataInputStream())
def ndkDir = properties.getProperty('ndk.dir', null)

// Call ndk build
def ndkBuildExt = Os.isFamily(Os.FAMILY_WINDOWS) ? ".cmd" : ""commandLine "$ndkDir/ndk-build${ndkBuildExt}",
'-C', file('.').absolutePath,
'NDK_APPLICATION_MK=Application.mk',
'APP_BUILD_SCRIPT=../../../../external/recast/Android.mk',
'NDK_PROJECT_PATH=../../../../external/recast/'
}

task buildMkBullet(dependsOn: "buildMkRecast",type: Exec) {
// Retrieve ndk dir
Properties properties = new Properties()
properties.load(project.rootProject.file('local.properties').newDataInputStream())
def ndkDir = properties.getProperty('ndk.dir', null)

// Call ndk build
def ndkBuildExt = Os.isFamily(Os.FAMILY_WINDOWS) ? ".cmd" : ""commandLine "$ndkDir/ndk-build${ndkBuildExt}",
'-C', file('.').absolutePath,
'NDK_APPLICATION_MK=Application.mk',
'APP_BUILD_SCRIPT=../../../../external/bullet/Android.mk',
'NDK_PROJECT_PATH=../../../../external/bullet/'
}

tasks.whenTaskAdded { task ->
def taskName = task.name

if (taskName.startsWith("compile")) {
task.dependsOn "buildMkBullet"}
}

dependencies {
compile files('../java/libs/android-async-http-1.4.8.jar')
}
3

Другие решения

Так что я, наконец, сделал это, добавив

exportedHeaders {
srcDir "src"}

линии и укажите его в правильном каталоге, где отсутствующие заголовки были.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector