0

Есть ли способ включить код сборки в собственный библиотечный модуль в студии android.Сборка в android gradle experimental

Так как этот post говорит, что вы можете включать только файлы * .C, * .CPP, * .C++, * .cc, * .cp, * .cpp, * .cxx с srcDir. Мне было интересно, если возможно другое решение или обходное решение, чтобы, по крайней мере, скомпилировать его с помощью родной библиотеки.

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

+0

Итак, подождите, не запускает ли make, чтобы построить его? О, ну ... (не ожидая переноса моих проектов NDK под град ..., поскольку я использую Makefiles + 'ndk-build', чтобы определить все, что необходимо во время сборки и шагов сборки). Не существует ли какой-либо простой способ кодирования пользовательского шага сборки, выполняемого в градиенте? (Я имею в виду, что это потрясающе, так что это должно быть программируемо, но я никогда не понимал этого, на самом деле весь град меня раздражает как из-за его производительности, так и из-за загадочного способа определения процесса сборки. грани отбросить его полностью и написать правила GNU make.) – Ped7g

+0

Поскольку вы упомянули об этом, я думаю, что я где-то читал, что вы можете использовать собственный make-файл для его сборки внутри студии Android, я обязательно посмотрю на него. – Alex

+0

Сам 'ndk-build' действительно использует make, поэтому я не использую какую-либо настраиваемую настройку для запуска make, я просто помещаю пользовательские правила в те общие файлы Makefiles из NDK (и использую скрипт ndk-build из NDK для сборки Это). Вероятно, есть способ запустить ndk-build из gradle (так как вы, вероятно, можете что-то кодировать в gradle), но я этого не делал. – Ped7g

ответ

1

Сначала создайте include папку внутри jni папку и libs папку внутри той же папки. Вы также можете создать внутри папки libs различные папки для разных chipsets (armeabi, mips, x86).

Скопируйте файлы .h внутри include папки и файлы компиляции (.a) в ваших папках libs

Затем вы должны изменить свой build.gradle, добавив новый repository внутри model

repositories { 
    libs(PrebuiltLibraries) { 
     libYourCLibrary{ 
      headers.srcDir "src/main/jni/include" 
      binaries.withType(StaticLibraryBinary) { 
       staticLibraryFile = file("src/main/jni/libs/${targetPlatform.getName()}/YOUR_C_LIBRARY.a") 
      } 
     } 
    } 
} 

добавить зависимостей этого repository внутри model

android.sources { 
    main { 
     jni { 
      dependencies { 
       library "libYourCLibrary" linkage "static" 
      } 
     } 
    } 
} 

И, наконец, Sync проект с файлами градиентов.

+0

Я знаю, как включить предварительно созданную библиотеку, но я действительно не хочу предварительно создавать свой код сборки, потому что я бы хотел просто сказать студии Android для ее создания и дождаться ее завершения, а не вручную компилировать ее при каждом изменении. – Alex

+0

Насколько я знаю, это невозможно сделать так. Единственный способ, который я могу себе представить, - использовать ant с gradle для создания вашей c lib, скопировать в libs как статический, а затем запустить gradle, возможно, это для ссылок может быть полезным http://ant-contrib.sourceforge.net/cpptasks/ и https://docs.gradle.org/current/userguide/ant.html –

+0

Это было бы лучше, чем создание его manuay, но это не идеальное решение, но спасибо за ссылки. – Alex

Смежные вопросы