我正在尝试使用forcehybrid create命令为Android构建Salesforce混合移动应用程序。不幸的是,我得到一个构建失败的错误。当我使用Cordova create命令启动另一个项目时,我没有进入终端。仅两个刚才提到的第一个命令是不同的,在这些第一个命令之后,它只是Cordova命令(直到构建)。所以我想知道为什么我的构建失败。
我正在与
一起工作forcehybrid和Cordova应用程序中的Cordova要求(相等)
Android Studio设置:
build.gradle文件
运行命令Cordova build命令--stacktrace
后遇到的错误25个可执行任务:已执行1个,最新24个(节点:47775) UnhandledPromiseRejectionWarning:未处理的承诺被拒绝 (拒绝ID:1):错误: /用户/ andygummer /桌面/项目/实践/ forcehybrid / forcehybridworks / platforms / android / gradlew: 命令失败,退出代码为1错误输出: /Users/andygummer/Desktop/Projects/practise/forcehybrid/forcehybridworks/platforms/android/app/build/intermediates/manifests/full/debug/AndroidManifest.xml:32: AAPT:错误:资源可绘制/ sf__icon(又名 找不到nl.forcehybridworks.mobile:drawable/sf__icon)。 /Users/andygummer/Desktop/Projects/practise/forcehybrid/forcehybridworks/platforms/android/app/build/intermediates/manifests/full/debug/AndroidManifest.xml:32: 错误:资源可绘制/ sf__icon(又名 找不到nl.forcehybridworks.mobile:drawable/sf__icon)。错误:失败 处理清单。
无法执行Aapt com.android.ide.common.process.ProcessException:执行失败 适应于 com.android.builder.core.AndroidBuilder.processResources(AndroidBuilder.java:796) 在 com.android.build.gradle.tasks.ProcessAndroidResources.invokeAaptForSplit(ProcessAndroidResources.java:551) 在 com.android.build.gradle.tasks.ProcessAndroidResources.doFullTaskAction(ProcessAndroidResources.java:285) 在 com.android.build.gradle.internal.tasks.IncrementalTask.taskAction(IncrementalTask.java:109) 在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在java.lang.reflect.Method.invoke(Method.java:498)在 org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:73)在 org.gradle.api.internal.project.taskfactory.DefaultTaskClassInfoStore $ IncrementalTaskAction.doExecute(DefaultTaskClassInfoStore.java:173) 在 org.gradle.api.internal.project.taskfactory.DefaultTaskClassInfoStore $ StandardTaskAction.execute(DefaultTaskClassInfoStore.java:134) 在 org.gradle.api.internal.project.taskfactory.DefaultTaskClassInfoStore $ StandardTaskAction.execute(DefaultTaskClassInfoStore.java:121) 在 org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter $ 1.run(ExecuteActionsTaskExecuter.java:122) 在 org.gradle.internal.progress.DefaultBuildOperationExecutor $ RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336) 在 org.gradle.internal.progress.DefaultBuildOperationExecutor $ RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328) 在 org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:197) 在 org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:107) 在 org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:111) 在 org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:92) 在 org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:70) 在 org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:63) 在 org.gradle.api.internal.tasks.execution.ResolveTaskOutputCachingStateExecuter.execute(ResolveTaskOutputCachingStateExecuter.java:54) 在 org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58) 在 org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:88) 在 org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:52) 在 org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52) 在 org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:54) 在 org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43) 在 org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:34) 在 org.gradle.execution.taskgraph.DefaultTaskGraphExecuter $ EventFiringTaskWorker $ 1.run(DefaultTaskGraphExecuter.java:248) 在 org.gradle.internal.progress.DefaultBuildOperationExecutor $ RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336) 在 org.gradle.internal.progress.DefaultBuildOperationExecutor $ RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328) 在 org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:197) 在 org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:107) 在 org.gradle.execution.taskgraph.DefaultTaskGraphExecuter $ EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:241) 在 org.gradle.execution.taskgraph.DefaultTaskGraphExecuter $ EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:230) 在 org.gradle.execution.taskgraph.DefaultTaskPlanExecutor $ TaskExecutorWorker.processTask(DefaultTaskPlanExecutor.java:124) 在 org.gradle.execution.taskgraph.DefaultTaskPlanExecutor $ TaskExecutorWorker.access $ 200(DefaultTaskPlanExecutor.java:80) 在 org.gradle.execution.taskgraph.DefaultTaskPlanExecutor $ TaskExecutorWorker $ 1.execute(DefaultTaskPlanExecutor.java:105) 在 org.gradle.execution.taskgraph.DefaultTaskPlanExecutor $ TaskExecutorWorker $ 1.execute(DefaultTaskPlanExecutor.java:99) 在 org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.execute(DefaultTaskExecutionPlan.java:625) 在 org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.executeWithTask(DefaultTaskExecutionPlan.java:580) 在 org.gradle.execution.taskgraph.DefaultTaskPlanExecutor $ TaskExecutorWorker.run(DefaultTaskPlanExecutor.java:99) 在 org.gradle.internal.concurrent.ExecutorPolicy $ CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63) 在 org.gradle.internal.concurrent.ManagedExecutorImpl $ 1.run(ManagedExecutorImpl.java:46) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) 在 java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:624) 在 org.gradle.internal.concurrent.ThreadFactoryImpl $ ManagedThreadRunnable.run(ThreadFactoryImpl.java:55) 在java.lang.Thread.run(Thread.java:748)造成原因: java.util.concurrent.ExecutionException: java.util.concurrent.ExecutionException: com.android.tools.aapt2.Aapt2Exception:AAPT2错误:检查日志 详细信息 com.google.common.util.concurrent.AbstractFuture.getDoneValue(AbstractFuture.java:503) 在 com.google.common.util.concurrent.AbstractFuture.get(AbstractFuture.java:482) 在 com.google.common.util.concurrent.AbstractFuture $ TrustedFuture.get(AbstractFuture.java:79) 在 com.android.builder.core.AndroidBuilder.processResources(AndroidBuilder.java:794) ... 48更多原因:java.util.concurrent.ExecutionException: com.android.tools.aapt2.Aapt2Exception:AAPT2错误:检查日志 详细信息 com.google.common.util.concurrent.AbstractFuture.getDoneValue(AbstractFuture.java:503) 在 com.google.common.util.concurrent.AbstractFuture.get(AbstractFuture.java:462) 在 com.google.common.util.concurrent.AbstractFuture $ TrustedFuture.get(AbstractFuture.java:79) 在 com.android.builder.internal.aapt.v2.QueueableAapt2.lambda $ makeValidatedPackage $ 1(QueueableAapt2.java:179) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) 在 java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:624) ... 1更多原因:com.android.tools.aapt2.Aapt2Exception:AAPT2 错误:请在以下位置查看日志以获取详细信息 com.android.builder.png.AaptProcess $ NotifierProcessOutput.handleOutput(AaptProcess.java:454) 在 com.android.builder.png.AaptProcess $ NotifierProcessOutput.err(AaptProcess.java:411) 在 com.android.builder.png.AaptProcess $ ProcessOutputFacade.err(AaptProcess.java:332) 在 com.android.utils.GrabProcessOutput $ 1.run(GrabProcessOutput.java:104)
失败:构建失败,并出现异常。
- 出了什么问题:任务':app:processDebugResources'的执行失败。
无法执行aapt
我在StackOverflow(Android Studio AndroidManifest.xml vs build.gradle)上找到的信息导致我进行设置:
到以下内容:
我在StackOverflow(Cordova does not create AndroidManifest.xml)上发现的有关androidManifest的信息是,有些插件使用源文件标签来处理非源代码,这会创建一个res文件夹(或lib),这会使Cordova感到困惑,它认为这是一个旧的Eclipse项目,而实际上却是一个Android Studio项目,因此会在旧位置搜索文件,而不是查找新位置。
这里的问题是,我的Cordova项目中有一个res文件夹,就像我的forcehybrid项目中一样。那么,我的Cordova项目如何在其中确实带有res文件夹的情况下构建,而forcehybrid却没有呢?
我尝试将androidManifest.xml从我的app / src / main两个文件夹移至我的app文件夹。但这在从主文件夹中删除文件后不起作用,因此这并不是真正的解决方案。
有人可以给我一些指导,以阐明为什么在使用Cordova create而不是使用salesforce create进行启动时,Cordova构建为何可以工作吗?