0

Gradle-experimental 0.6.0-alpha1 準拠の build.gradle ファイルがあります。

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 (cocos2d がフックするための main.cpp ファイルが含まれています)

また、proj.android 以外の別のフォルダーにある他の多くの cpp クラスもあります (たとえば、cocos2d cpp ファイルは proj.android/../../../dependencies/XXXX/cocos2d-x にあり、エンジン ファイルは proj.android/../../../dependencies/XXXX/engine にあり、すべての C++ コードは proj.android/../Classes にあります (すべての cocos2dx プロジェクトと同様)。

最新の gradle 実験的プラグイン (gradle-experimental-0.6.0-alpha1) を使用してアプリケーションを構築しようとしています。

最初にそのままビルドして、プロジェクトをコンパイルして実行しようとしましたが、gradle ビルドに C++ ソース ファイルを含めていなかったため、空でした (libMyApp.so は生成されませんでした)。

次に、ソースファイルフォルダーへのシンボリックリンクを作成して、gradleがそれらを選択できるようにしました。

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

(./gradlew assembleDebug)をビルドしているとき、シンボリックにリンクされたC++ファイルをコンパイルしますが、何を試しても、ヘッダーの最初のインクルードで毎回失敗します。

ここで説明されているように、次を使用してソースファイル/ヘッダーインクルードを追加しようとしました:

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

しかし、欠落している「.h」ヘッダーを見つけることができませんでした。cocos2Dx、gradle-experimental、および android-studio を使用して結果的な C++ プロジェクトをビルドしようとしたことがある場合は、経験を共有してください。コンパイルできるようになったら、ある種のガイドをコンパイルしようとします(いつか:))

参考までに:最新のgradleドキュメント:

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

便利なリンク:

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

4

2 に答える 2

3

こんにちは、あなたのファイルをありがとう、私はあなたのファイルにいくつかの変更を加えました.

Mac OSX で cocos2Dx 3.9 を使って作業しました。

必要なもの: com.android.tools.build:gradle-experimental:0.6.0-alpha5'

Java と C++ に同時にブレークポイントを設定できます。

シリル

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')
}
于 2016-02-14T18:04:09.667 に答える
0

だから私は最終的に追加することでそれを機能させました

exportedHeaders {
                    srcDir "src"
                }

行に移動し、不足しているヘッダーがあった正しいディレクトリをポイントします。

于 2015-12-10T17:15:01.283 に答える