2014-01-08 2 views
1

В настоящее время у меня есть пользовательский build.gradle, который имеет cmake и строит проект SWIG C++ и генерирует файл jar для использования в моем проекте Android. (Ящик генерируется в пределах cmake)Проблема создания пользовательского проекта градиента, который выводит банку

Моя текущая настройка работает по большей части. Файл jar правильно связан с моим проектом Android, и он строит просто отлично. Моя единственная проблема заключается в том, что андроид-студия не распознает библиотеку. Не работает автозаполнение, и это подчеркивает все использование моей библиотеки как ошибки.

с ++ проект build.gradle

task cmakeMyLibrary(type: Exec) { 
    inputs.file 'CMakeLists.txt' 
    outputs.file 'Makefile' 

    ext.jarFile = new File(parent.buildDir, "mylibrary.jar") 

    commandLine 'cmake' ... 
} 

task makeMyLibrary(type: Exec, dependsOn: cmakeMyLibrary) { 

    inputs.dir '.' 

    outputs.file cmakeMyLibrary.jarFile 

    commandLine 'make', '-j10' 
} 

task cleanMyLibrary(type: Exec) { 
    commandLine 'make', 'clean' 
} 

configurations.create('default') 
artifacts { 
    it."default"(cmakeMyLibrary.jarFile) { 
     builtBy makeMyLibrary 
    } 
} 

андроида проект build.grade

buildscript { 
    repositories { 
     mavenCentral() 
    } 
    dependencies { 
     classpath 'com.android.tools.build:gradle:0.7.+' 
    } 
} 
apply plugin: 'android' 

repositories { 
    mavenCentral() 
} 

android { 
    compileSdkVersion 19 
    buildToolsVersion "18.1.1" 

    defaultConfig { 
     minSdkVersion 10 
     targetSdkVersion 19 
     versionCode 1 
     versionName "1.0" 
    } 
    buildTypes { 
     release { 
      runProguard false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' 
     } 
    } 
} 

dependencies { 
    compile 'com.android.support:appcompat-v7:+' 
    compile project(':mylibrary') 
} 

Каждый раз, когда я "проект синхронизации с Gradle файлов" я получаю исключение:

Gradle 'MyApplication6' project refresh failed: 
exception during working with external system: java.lang.AssertionError 
at com.android.tools.idea.gradle.dependency.ModuleDependency.getModuleName(ModuleDependency.java:49) 
at com.android.tools.idea.gradle.dependency.ModuleDependency. (ModuleDependency.java:43) 
at com.android.tools.idea.gradle.dependency.Dependency.populate(Dependency.java:143) 
at com.android.tools.idea.gradle.dependency.Dependency.extractFrom(Dependency.java:106) 
at com.android.tools.idea.gradle.project.AndroidGradleProjectResolver.populateModuleDependencies(AndroidGradleProjectResolver.java:154) 
at org.jetbrains.plugins.gradle.service.project.GradleProjectResolver.doResolveProjectInfo(GradleProjectResolver.java:232) 
at org.jetbrains.plugins.gradle.service.project.GradleProjectResolver.access$000(GradleProjectResolver.java:60) 
at org.jetbrains.plugins.gradle.service.project.GradleProjectResolver$1.fun(GradleProjectResolver.java:116) 
at org.jetbrains.plugins.gradle.service.project.GradleProjectResolver$1.fun(GradleProjectResolver.java:112) 
at org.jetbrains.plugins.gradle.service.project.GradleExecutionHelper.execute(GradleExecutionHelper.java:190) 
at org.jetbrains.plugins.gradle.service.project.GradleProjectResolver.resolveProjectInfo(GradleProjectResolver.java:112) 
at org.jetbrains.plugins.gradle.service.project.GradleProjectResolver.resolveProjectInfo(GradleProjectResolver.java:60) 
at com.intellij.openapi.externalSystem.service.remote.RemoteExternalSystemProjectResolverImpl$1.produce(RemoteExternalSystemProjectResolverImpl.java:41) 
at com.intellij.openapi.externalSystem.service.remote.RemoteExternalSystemProjectResolverImpl$1.produce(RemoteExternalSystemProjectResolverImpl.java:37) 
at com.intellij.openapi.externalSystem.service.remote.AbstractRemoteExternalSystemService.execute(AbstractRemoteExternalSystemService.java:59) 
at com.intellij.openapi.externalSystem.service.remote.RemoteExternalSystemProjectResolverImpl.resolveProjectInfo(RemoteExternalSystemProjectResolverImpl.java:37) 
at com.intellij.openapi.externalSystem.service.remote.wrapper.ExternalSystemProjectResolverWrapper.resolveProjectInfo(ExternalSystemProjectResolverWrapper.java:49) 
at com.intellij.openapi.externalSystem.service.internal.ExternalSystemResolveProjectTask.doExecute(ExternalSystemResolveProjectTask.java:53) 
at com.intellij.openapi.externalSystem.service.internal.AbstractExternalSystemTask.execute(AbstractExternalSystemTask.java:130) 
at com.intellij.openapi.externalSystem.service.internal.AbstractExternalSystemTask.execute(AbstractExternalSystemTask.java:120) 
at com.intellij.openapi.externalSystem.util.ExternalSystemUtil$3.execute(ExternalSystemUtil.java:441) 
at com.intellij.openapi.externalSystem.util.ExternalSystemUtil$4$2.run(ExternalSystemUtil.java:504) 
at com.intellij.openapi.progress.impl.ProgressManagerImpl$TaskRunnable.run(ProgressManagerImpl.java:464) 
at com.intellij.openapi.progress.impl.ProgressManagerImpl$2.run(ProgressManagerImpl.java:178) 
at com.intellij.openapi.progress.ProgressManager.executeProcessUnderProgress(ProgressManager.java:209) 
at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:212) 
at com.intellij.openapi.progress.impl.ProgressManagerImpl.runProcess(ProgressManagerImpl.java:171) 
at com.intellij.openapi.progress.impl.ProgressManagerImpl$8.run(ProgressManagerImpl.java:373) 
at com.intellij.openapi.application.impl.ApplicationImpl$8.run(ApplicationImpl.java:435) 
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) 
at java.util.concurrent.FutureTask.run(FutureTask.java:262) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
at java.lang.Thread.run(Thread.java:744) 
at com.intellij.openapi.application.impl.ApplicationImpl$1$1.run(ApplicationImpl.java:152) 

Когда я смотрю на источник градиента, кажется, это утверждение о том, что путь, переданный в getModuleName, пуст.

ответ

0

Невозможно ответить на ваш вопрос, но не забудьте обновить до Build Tools 19.0.1 и плагин Android Gradle 0.8.1 (или что-то еще самое новое) от версии 18.1.1 и 0.7. +. В прошлом было несколько ошибок при работе с gradle/IntelliJ, которые были вызваны более старыми версиями таких. Вы хотите, чтобы оболочка Gradle была до 0,10, но IntelliJ должен рассказать вам об этом.

может быть связано: https://code.google.com/p/android/issues/detail?id=62391

Возможно размещать больше о структуре проекта ... или, так как это было в течение месяца, дайте нам знать, если вы нашли починку ... :)

0

если это чистый проект на C++ и в нем нет Java-кода, можете ли вы создать его как статический или общий lib [включая все ABI, которые хотите поддержать], и импортировать ли проект lib? Android-студия поддерживает этот импорт родную Lib вещь с любым Gradle-экспериментального плагиным http://tools.android.com/tech-docs/new-build-system/gradle-experimental или CMake/НКА-сборкой плагиным http://tools.android.com/tech-docs/external-c-builds

Некоторых примеров в этом репо https://github.com/googlesamples/android-ndk, мастер филиал для Gradle-экспериментального, мастер-CMake для CMake плагина , Конкретным примером, подобным вашему делу, будет hello-libs [появляется в обеих ветвях].

У вас будет свой код Java-кода вашего проекта приложения на свой собственный код [c/C++]; то из этого собственного кода позвоните в SWIG C++ lib. Другими словами, прикладной проект нуждается в оболочке, потому что ему нужно иметь дело с кодом JNI [я предполагаю], а JNI-код имеет вашу подпись java-класса/пакета в своих именах функций jni.

Я не уверен, что нормальный проект JAVA может напрямую использовать стороннюю библиотеку lib: имена функций lib не имеют имени пакета и java-класса.

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