orcDamnar
@orcDamnar
Java, C/C++, Android SDK

Как заставить Android Studio в редакторе увидеть импортоы для jni.h, android/log.h?

Привет всем. Есть проблема - пытаюсь переехать в AndroidStudio из Eclipse. Проект использует ndk, prebuild libs, stl. прикол в том, что stl инклуды видит, а jni.h, android/log.h и мои пребилды не видит. Касается именно редактора, так как проект собирается и работает. Но хотелось бы и с/c++ писать тут же. Можно конечно и забить на подсказки, но как то скучновато без них.

вот gradle:project
buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle-experimental:0.7.0-alpha5'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

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

model{

    repositories {
        libs(PrebuiltLibraries) {
            avcodec {
                headers.srcDir "${nativeIncludes}\\libavcodec"
                binaries.withType(SharedLibraryBinary) {
                    sharedLibraryFile = file("${nativePrebuildLibs}\\ffmpeg\\armeabi-v7a\\lib\\libavcodec-56.so")
                }
            }

            avfilter {
                headers.srcDir "${nativeIncludes}\\libavfilter"
                binaries.withType(SharedLibraryBinary) {
                    sharedLibraryFile = file("${nativePrebuildLibs}\\ffmpeg\\armeabi-v7a\\lib\\libavfilter-5.so")
                }
            }

            avformat {
                headers.srcDir "${nativeIncludes}\\libavformat"
                binaries.withType(SharedLibraryBinary) {
                    sharedLibraryFile = file("${nativePrebuildLibs}\\ffmpeg\\armeabi-v7a\\lib\\libavformat-56.so")
                }
            }

            mp3lame {
                headers.srcDir "${nativeIncludes}\\lame"
                binaries.withType(SharedLibraryBinary) {
                    sharedLibraryFile = file("${nativePrebuildLibs}\\lame\\armeabi-v7a\\libmp3lame.so")
                }
            }

            avutil {
                headers.srcDir "${nativeIncludes}\\libavutil"
                binaries.withType(SharedLibraryBinary) {
                    sharedLibraryFile = file("${nativePrebuildLibs}\\ffmpeg\\armeabi-v7a\\lib\\libavutil-54.so")
                }
            }

            swresample {
                headers.srcDir "${nativeIncludes}\\libswresample"
                binaries.withType(SharedLibraryBinary) {
                    sharedLibraryFile = file("${nativePrebuildLibs}\\ffmpeg\\armeabi-v7a\\lib\\libswresample-1.so")
                }
            }

            swscale {
                headers.srcDir "${nativeIncludes}\\libswscale"
                binaries.withType(SharedLibraryBinary) {
                    sharedLibraryFile = file("${nativePrebuildLibs}\\ffmpeg\\armeabi-v7a\\lib\\libswscale-3.so")
                }
            }

        }
    }

    android {
        compileSdkVersion 23
        buildToolsVersion "23.0.3"

        ndk {
            moduleName "codecs"
            abiFilters.add("armeabi-v7a")
            CFlags.addAll(["-D__STDC_CONSTANT_MACROS","-frtti", "-fexceptions"])
            ldLibs.addAll(["log"])
            stl "gnustl_shared"
        }
        defaultConfig {
            applicationId "my.app.id"
            minSdkVersion.apiLevel 11
            targetSdkVersion.apiLevel 23
            versionCode 13
            versionName "2.0.2.2"
        }

        buildTypes {
            release {
                minifyEnabled false
                proguardFiles.add(file("proguard-rules.pro"))
                signingConfig = $("android.signingConfigs.mysigning")
                ndk {
                    debuggable true
                }
            }
        }
//
//        productFlavors {
//            create("armv7a") {
//                ndk {
//                    // You can customize the NDK configurations for each
//                    // productFlavors and buildTypes.
//
//                }
//            }
//        }
    }

    android.signingConfigs {
        create("my_signing") {
            storeFile "path_to_jks"
            storePassword "password"
            keyAlias "Key Alias"
            keyPassword "AliasPass"
            storeType "jks"
        }
    }

    android.sources {
        main {
            jni {
                exportedHeaders{
                    srcDir "${nativeIncludes}".toString()
                }
                dependencies{
                    library "avcodec" linkage "shared"
                    library "avfilter" linkage "shared"
                    library "avformat" linkage "shared"
                    library "mp3lame" linkage "shared"
                    library "avutil" linkage "shared"
                    library "swresample" linkage "shared"
                    library "swscale" linkage "shared"
                }
            }
            jniLibs {
                dependencies {
                    library "avcodec"
                    library "avfilter"
                    library "avformat"
                    library "mp3lame"
                    library "avutil"
                    library "swresample"
                    library "swscale"
                }
            }
        }
    }


}


dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.3.0'
    compile 'com.android.support:design:23.3.0'
    compile 'com.google.android.gms:play-services-analytics:8.4.0'
    compile 'com.google.android.gms:play-services-ads:8.4.0'
}


#include <fstream>
#include "android/log.h"
#include "Rect.h"
#include "RectF.h"
#include <vector>


#ifdef __cplusplus
extern "C" {
#include "libavformat/avformat.h"
#include "libavcodec/avcodec.h"
  • Вопрос задан
  • 966 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Droid924
android.sources {
        main {
            jni {
                source {
                    srcDir "src/main/jni"
                }
                exportedHeaders{
                    srcDir "${nativeIncludes}".toString()
                }
    ...


Как я понял, студии для подключения возможностей редактирования необходимо, чтобы Gradle знал про твои source файлы.

Ещё мне кажется несколько странной эта строчка:
CFlags.addAll(["-D__STDC_CONSTANT_MACROS","-frtti", "-fexceptions"])

Я бы скорее использовал cppFlags
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы