Подтвердить что ты не робот

Как исключить файл cpp в экспериментальном gradle?

Я пытаюсь использовать Android Studio 1.3.1 для компиляции проекта NDK с использованием экспериментального синтаксиса gradle.

Мой build.gradle очень похож на тот, который представлен в примере чайника

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

Я попытался добавить определение exclude:

android.sources {
    main {
        jni {
            source {
                srcDirs 'src/main/jni'

                excludes += "src/main/jni/FileToExclude.cpp"
            }
        }

    }
}

, но это не повлияло на результат. gradle все еще пытается скомпилировать этот файл.

Я пробовал excludes, exclude с помощью =, += и ничего не имел, но перестановка не работает.

4b9b3361

Ответ 1

Из того, что я нашел, правильная директива об исключении файла из сборки исключить, а не исключает. Проверьте свой build.gradle, чтобы убедиться, что вы не допустили ошибку здесь (вы использовали исключает в предоставленном образце).

Обновление: ОК, после некоторого исследования я нашел этот поток в трекере проблемы AOSP. Начальник темы говорит следующее:

Компоненты java/resources в наборах источников позволяют включать/исключать шаблоны.

Мы должны сделать это для aidl/rs/jni/assets.

Проблема все еще открыта, поэтому я предполагаю, что эта функциональность должна быть реализована в плагине Android Gradle или в Android Studio или в обоих из них (и еще не реализована). Он будет реализован в Android Studio 1.5, по крайней мере, это то, что говорят теги.

Ответ 2

Я думаю, что вы неправильно указываете путь к файлу. Это должно быть:

srcDir 'src/main/jni'

исключить 'FileToExclude.cpp'

Вы можете перейти по этой ссылке. https://discuss.gradle.org/t/how-can-i-exclude-certain-java-files-from-being-compiled/5287/2

Также обратите внимание, что вместо исключить вместо исключить и srcDir вместо srcDirs.

>

Ответ 3

Я посмотрел в источник Android, похоже, что вы можете обновить фильтр, чтобы исключить ваш файл. Я не знаю, какую версию плагина gradle вы используете, поэтому я не могу быть уверен, что такое базовый api. Вы можете попробовать установить PatternFilterable вручную, чтобы исключить файл.

android.sources {
    main {
        jni {
            source {
                srcDirs 'src/main/jni'
                getFilter().exclude('**/FileToExclude.cpp')
            }
        }
    }
}

Я просмотрел Gradle Обзор кода и увидел, что используется LanguageSourceSet. Глядя на документацию gradle для LanguageSourceSet, к которой вы можете получить доступ SourceDirectorySet, который имеет PatternFilterable, в котором вы можете установить исключение.

Ответ 4

Как еще экспериментально, не существует большой документации по Gradle Experimental. Но с некоторыми экспериментами я смог разобраться с тем, как исключить некоторые файлы, т.е.:

model {
    //...

    android.sources {
        //...

        jni {
            //...

            source {
                excludes.add("<FILE PATH>") // You can have multiple excludes.add(...)
            }
        }
    }
}

Примечание: решение работает на gradle -experimental 0.7.0

Ответ 5

Самый простой способ - установить свойства в build.gradle:

sourceSets.main.jni.srcDirs = [] // now, AS will not try to compile your source files
sourceSets.main.jniLibs.srcDirs = ['libs'] // now, AS will pick up the compiled SO files from libs (where ndk-build will normally put them)

Вы также можете определить задачу "buildNative", чтобы запустить ndk-build как часть compileTask, как определено в этом answer.