我目前有一个自定义的build.gradle,它可以cmake并构建一个SWIG c++项目并生成一个jar文件供我的android项目使用。 ( jar 在cmake内生成)
我当前的设置大部分都可以使用。 jar文件已正确链接到我的android项目,并且构建良好。我唯一的问题是android studio无法识别该库。没有自动完成功能在起作用,它强调了将我的媒体库的所有使用作为错误。
C++项目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
}
}
android项目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文件同步项目”时,都会得到一个异常(exception):
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)
当我查看gradle源时,似乎断言传递给getModuleName的路径为空。
最佳答案
可能无法帮助您回答问题,但请确保从18.1.1和0.7。+升级到Build Tools 19.0.1和Android Gradle插件0.8.1(或最新版本)。过去使用gradle / IntelliJ时,存在一些由旧版本的bug引起的错误。您将要确保Gradle包装器最多为0.10,但是IntelliJ会提示您有关情况。
可能相关:https://code.google.com/p/android/issues/detail?id=62391
也许发布更多有关您的项目结构的信息...或者由于已经过去了一个多月,请告诉我们您是否已找到解决方法... :)
关于android - 创建创建输出jar的自定义gradle项目时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20986672/