6

ヘッダー ファイルがモジュールのメイン ソース フォルダーとは異なる場所にある場合、Android Studio はヘッダー ファイルを見つけることができません。これは、#include "SDL_config.h" ステートメントが赤色で強調表示されていることでわかります (他の #include ステートメントは問題ありません)。

以下の cppFlags の値を変更しようとしましたが、これらの cppFlags がコンパイラに渡されていることさえ疑っています。

この方法で、メインのソース フォルダー以外のフォルダーからファイルを含めることができた人はいますか?

cppFlags、あるいは moduleName、さらにはソースを指定した方法に問題はありますか?

SDL2 ソースを調べて、すべての #include ステートメントを相対的な #include パスに変更することもできますが、SDL2 ソースを実際に変更する必要はありません。どうにかしてインクルードパスのリストを指定できるはずです。

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

model {
...
    android.ndk {
        moduleName = 'main'

        //W:\hello-sdl-android\android-project\app\src\main\jni\SDL2\include
        cppFlags += "-I${file("src/main/jni/SDL2/include")}".toString()
        cppFlags += "-I${file("src/main/jni/SDL2/src")}".toString()
    }

    android.sources {
        main.jni {
            source {
                srcDirs += ['src/main/jni/src']
                srcDirs += ['src/main/jni/SDL2/src']
            }
        }
    }
...
}

更新: 現在のプロジェクト レイアウトに関する詳細情報は次のとおりです。

app/src/main/jni app/src/main/jni/src/Main.cpp <- これは app/src/main/jni/SDL2 をコンパイルしています <- すべての SDL2 ソースはここにあります app/src/main/jni/ GLM <- すべての GLM ソースはここにあります

このレイアウトは、ここで提供されたサンプル プロジェクトを使用した直接の結果です: https://gitlab.com/scannerdarkly/hello-sdl-android

そのプロジェクトは、コマンド ラインから ndk-build を使用してビルドされます。Android Studio 内でビルドすることで、さらに一歩進めたいと考えました。私のプロジェクトは、GLES2 デバイスで三角形を描画しようとします。

これまでの私の現在のプロジェクトへのリンクは次のとおりです。

http://www.mediafire.com/download/92577p7vf123l72/hello-sdl-android.zip

4

4 に答える 4

9

私は少し異なるアプローチを使用します。

cFlags += "-I" + file("src/main/jni/SDL2/include").absolutePath

..そしてこれはうまくいきます。その理由はおそらく、コンパイラが別の作業ディレクトリで起動され、absolutePathがここでのあいまいさを解決するためです。

于 2015-11-11T21:08:35.943 に答える
1

以下は、gradle の実験的プラグインを使用したヘッダー パスの別のスタイルです。例として、openssl といくつかの「abc」ライブラリを使用します。

// compile parameters

// include openssl headers C (if you have C files)
CFlags.add("-isystem${project.rootDir}/external-libraries/openssl/openssl-1.0.2g/include".toString())

// include openssl headers C++ (if you have cpp files)
cppFlags.add("-isystem${project.rootDir}/external-libraries/openssl/openssl-1.0.2g/include".toString())

// include abc headers C (if you have C files)
CFlags.add("-I${project.rootDir}/external-libraries/abc/abc-5.5/include".toString())

// include abc headers C++ (if you have cpp files)
cppFlags.add("-I${project.rootDir}/external-libraries/abc/abc-5.5/include".toString())

// linking parameters

// link libcrypto.so
ldFlags.add("-L${project.rootDir}/external-libraries/openssl/openssl-1.0.2g/lib/armeabi-v7a".toString())
ldLibs.add('crypto')

// link libabc.so
ldFlags.add("-L${project.rootDir}/external-libraries/abc/abc-5.5/lib".toString())
ldLibs.add('abc')
于 2016-09-20T14:05:09.483 に答える
0

多くのヘッダー パスの場合:

cFlags = "-I" + file("src/main/jni/path1").absolutePath +
     " -I" + file("src/main/jni/path2").absolutePath +
     " -I" + file("src/main/jni/path3").absolutePath
于 2016-04-12T15:07:30.407 に答える