java 如何解决 Cordova 上任务 transformClassesWithDexForArmv7Debug 的执行失败
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/37084006/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How to solve Execution failed for task transformClassesWithDexForArmv7Debug on Cordova
提问by Olaf
When i try build a APK width Cordova, this show me a error exception.
To create my APK i use
cordova build android
Before install Windows 10, i use the same configuration, but work well.
当我尝试构建 APK 宽度 Cordova 时,这显示了一个错误异常。要创建我使用的 APK
cordova build android
在安装 Windows 10 之前,我使用相同的配置,但运行良好。
My steps
我的脚步
- Create project with
cordova create Example com.example.app Example
- Add platform support with
cordova platform add android
- Add plugins support with
cordova plugin add XYZ
- prepare cordova project with
cordova prepare android
- build cordova APK with
cordova build android
(i don't use --release 'cos i need debug APK)
- 创建项目
cordova create Example com.example.app Example
- 添加平台支持
cordova platform add android
- 添加插件支持
cordova plugin add XYZ
- 准备科尔多瓦项目
cordova prepare android
- 构建cordova APK
cordova build android
(我不使用--release'因为我需要调试APK)
My configuration:
我的配置:
- Windows 10 x64 width 16GB Ram and AMD 2.4 Ghz * 8 Core( I don't use Emulator 'cos is too slow in AMD)
- Cordova 6.1.1
- Java 1.8.0_91
- Java(TM) SE Runtime Environment (build 1.8.0_91-b14)
- Android Studio 2.1(Build AI-143.2790544)
- Java HotSpot(TM) 64-Bit Server VM (build 25.91-b14, mixed mode)
- PATH: ANDROID_HOME=C:\Users\Olaf\AppData\Local\Android\sdk
- PATH: JAVA_HOME=C:\Program Files\java\jdk1.8.0_91
- Windows 10 x64 宽度 16GB Ram 和 AMD 2.4 Ghz * 8 核(我不使用模拟器,因为 AMD 太慢了)
- 科尔多瓦6.1.1
- Java 1.8.0_91
- Java(TM) SE 运行时环境(构建 1.8.0_91-b14)
- Android Studio 2.1(Build AI-143.2790544)
- Java HotSpot(TM) 64 位服务器 VM(构建 25.91-b14,混合模式)
- 路径:ANDROID_HOME=C:\Users\Olaf\AppData\Local\Android\sdk
- 路径:JAVA_HOME=C:\Program Files\java\jdk1.8.0_91
build.gradle file
build.gradle 文件
// GENERATED FILE! DO NOT EDIT!
apply plugin: 'android'
buildscript {
repositories {
mavenCentral()
}
// Switch the Android Gradle plugin version requirement depending on the
// installed version of Gradle. This dependency is documented at
// http://tools.android.com/tech-docs/new-build-system/version-compatibility
// and https://issues.apache.org/jira/browse/CB-8143
dependencies {
classpath 'com.android.tools.build:gradle:1.5.0'
}
}
// Allow plugins to declare Maven dependencies via build-extras.gradle.
repositories {
mavenCentral()
}
task wrapper(type: Wrapper) {
gradleVersion = '2.8'
}
// Configuration properties. Set these via environment variables, build-extras.gradle, or gradle.properties.
// Refer to: http://www.gradle.org/docs/current/userguide/tutorial_this_and_that.html
ext {
apply from: 'CordovaLib/cordova.gradle'
// The value for android.compileSdkVersion.
if (!project.hasProperty('cdvCompileSdkVersion')) {
cdvCompileSdkVersion = null;
}
// The value for android.buildToolsVersion.
if (!project.hasProperty('cdvBuildToolsVersion')) {
cdvBuildToolsVersion = null;
}
// Sets the versionCode to the given value.
if (!project.hasProperty('cdvVersionCode')) {
cdvVersionCode = null
}
// Sets the minSdkVersion to the given value.
if (!project.hasProperty('cdvMinSdkVersion')) {
cdvMinSdkVersion = null
}
// Whether to build architecture-specific APKs.
if (!project.hasProperty('cdvBuildMultipleApks')) {
cdvBuildMultipleApks = null
}
// .properties files to use for release signing.
if (!project.hasProperty('cdvReleaseSigningPropertiesFile')) {
cdvReleaseSigningPropertiesFile = null
}
// .properties files to use for debug signing.
if (!project.hasProperty('cdvDebugSigningPropertiesFile')) {
cdvDebugSigningPropertiesFile = null
}
// Set by build.js script.
if (!project.hasProperty('cdvBuildArch')) {
cdvBuildArch = null
}
// Plugin gradle extensions can append to this to have code run at the end.
cdvPluginPostBuildExtras = []
}
// PLUGIN GRADLE EXTENSIONS START
apply from: "cordova-plugin-crosswalk-webview/app-xwalk.gradle"
// PLUGIN GRADLE EXTENSIONS END
def hasBuildExtras = file('build-extras.gradle').exists()
if (hasBuildExtras) {
apply from: 'build-extras.gradle'
}
// Set property defaults after extension .gradle files.
if (ext.cdvCompileSdkVersion == null) {
ext.cdvCompileSdkVersion = privateHelpers.getProjectTarget()
}
if (ext.cdvBuildToolsVersion == null) {
ext.cdvBuildToolsVersion = privateHelpers.findLatestInstalledBuildTools()
}
if (ext.cdvDebugSigningPropertiesFile == null && file('debug-signing.properties').exists()) {
ext.cdvDebugSigningPropertiesFile = 'debug-signing.properties'
}
if (ext.cdvReleaseSigningPropertiesFile == null && file('release-signing.properties').exists()) {
ext.cdvReleaseSigningPropertiesFile = 'release-signing.properties'
}
// Cast to appropriate types.
ext.cdvBuildMultipleApks = cdvBuildMultipleApks == null ? false : cdvBuildMultipleApks.toBoolean();
ext.cdvMinSdkVersion = cdvMinSdkVersion == null ? null : Integer.parseInt('' + cdvMinSdkVersion)
ext.cdvVersionCode = cdvVersionCode == null ? null : Integer.parseInt('' + cdvVersionCode)
def computeBuildTargetName(debugBuild) {
def ret = 'assemble'
if (cdvBuildMultipleApks && cdvBuildArch) {
def arch = cdvBuildArch == 'arm' ? 'armv7' : cdvBuildArch
ret += '' + arch.toUpperCase().charAt(0) + arch.substring(1);
}
return ret + (debugBuild ? 'Debug' : 'Release')
}
// Make cdvBuild a task that depends on the debug/arch-sepecific task.
task cdvBuildDebug
cdvBuildDebug.dependsOn {
return computeBuildTargetName(true)
}
task cdvBuildRelease
cdvBuildRelease.dependsOn {
return computeBuildTargetName(false)
}
task cdvPrintProps << {
println('cdvCompileSdkVersion=' + cdvCompileSdkVersion)
println('cdvBuildToolsVersion=' + cdvBuildToolsVersion)
println('cdvVersionCode=' + cdvVersionCode)
println('cdvMinSdkVersion=' + cdvMinSdkVersion)
println('cdvBuildMultipleApks=' + cdvBuildMultipleApks)
println('cdvReleaseSigningPropertiesFile=' + cdvReleaseSigningPropertiesFile)
println('cdvDebugSigningPropertiesFile=' + cdvDebugSigningPropertiesFile)
println('cdvBuildArch=' + cdvBuildArch)
println('computedVersionCode=' + android.defaultConfig.versionCode)
android.productFlavors.each { flavor ->
println('computed' + flavor.name.capitalize() + 'VersionCode=' + flavor.versionCode)
}
}
android {
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src']
resources.srcDirs = ['src']
aidl.srcDirs = ['src']
renderscript.srcDirs = ['src']
res.srcDirs = ['res']
assets.srcDirs = ['assets']
jniLibs.srcDirs = ['libs']
}
}
defaultConfig {
versionCode cdvVersionCode ?: Integer.parseInt("" + privateHelpers.extractIntFromManifest("versionCode") + "0")
applicationId privateHelpers.extractStringFromManifest("package")
if (cdvMinSdkVersion != null) {
minSdkVersion cdvMinSdkVersion
}
}
lintOptions {
abortOnError false;
}
compileSdkVersion cdvCompileSdkVersion
buildToolsVersion cdvBuildToolsVersion
if (Boolean.valueOf(cdvBuildMultipleApks)) {
productFlavors {
armv7 {
versionCode defaultConfig.versionCode + 2
ndk {
abiFilters "armeabi-v7a", ""
}
}
x86 {
versionCode defaultConfig.versionCode + 4
ndk {
abiFilters "x86", ""
}
}
all {
ndk {
abiFilters "all", ""
}
}
}
} else if (!cdvVersionCode) {
def minSdkVersion = cdvMinSdkVersion ?: privateHelpers.extractIntFromManifest("minSdkVersion")
// Vary versionCode by the two most common API levels:
// 14 is ICS, which is the lowest API level for many apps.
// 20 is Lollipop, which is the lowest API level for the updatable system webview.
if (minSdkVersion >= 20) {
defaultConfig.versionCode += 9
} else if (minSdkVersion >= 14) {
defaultConfig.versionCode += 8
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_6
targetCompatibility JavaVersion.VERSION_1_6
}
if (cdvReleaseSigningPropertiesFile) {
signingConfigs {
release {
// These must be set or Gradle will complain (even if they are overridden).
keyAlias = ""
keyPassword = "__unset" // And these must be set to non-empty in order to have the signing step added to the task graph.
storeFile = null
storePassword = "__unset"
}
}
buildTypes {
release {
signingConfig signingConfigs.release
}
}
addSigningProps(cdvReleaseSigningPropertiesFile, signingConfigs.release)
}
if (cdvDebugSigningPropertiesFile) {
addSigningProps(cdvDebugSigningPropertiesFile, signingConfigs.debug)
}
}
dependencies {
compile fileTree(dir: 'libs', include: '*.jar')
// SUB-PROJECT DEPENDENCIES START
debugCompile project(path: "CordovaLib", configuration: "debug")
releaseCompile project(path: "CordovaLib", configuration: "release")
// SUB-PROJECT DEPENDENCIES END
}
def promptForReleaseKeyPassword() {
if (!cdvReleaseSigningPropertiesFile) {
return;
}
if ('__unset'.equals(android.signingConfigs.release.storePassword)) {
android.signingConfigs.release.storePassword = privateHelpers.promptForPassword('Enter key store password: ')
}
if ('__unset'.equals(android.signingConfigs.release.keyPassword)) {
android.signingConfigs.release.keyPassword = privateHelpers.promptForPassword('Enter key password: ');
}
}
gradle.taskGraph.whenReady { taskGraph ->
taskGraph.getAllTasks().each() { task ->
if (task.name == 'validateReleaseSigning') {
promptForReleaseKeyPassword()
}
}
}
def addSigningProps(propsFilePath, signingConfig) {
def propsFile = file(propsFilePath)
def props = new Properties()
propsFile.withReader { reader ->
props.load(reader)
}
def storeFile = new File(props.get('key.store') ?: privateHelpers.ensureValueExists(propsFilePath, props, 'storeFile'))
if (!storeFile.isAbsolute()) {
storeFile = RelativePath.parse(true, storeFile.toString()).getFile(propsFile.getParentFile())
}
if (!storeFile.exists()) {
throw new FileNotFoundException('Keystore file does not exist: ' + storeFile.getAbsolutePath())
}
signingConfig.keyAlias = props.get('key.alias') ?: privateHelpers.ensureValueExists(propsFilePath, props, 'keyAlias')
signingConfig.keyPassword = props.get('keyPassword', props.get('key.alias.password', signingConfig.keyPassword))
signingConfig.storeFile = storeFile
signingConfig.storePassword = props.get('storePassword', props.get('key.store.password', signingConfig.storePassword))
def storeType = props.get('storeType', props.get('key.store.type', ''))
if (!storeType) {
def filename = storeFile.getName().toLowerCase();
if (filename.endsWith('.p12') || filename.endsWith('.pfx')) {
storeType = 'pkcs12'
} else {
storeType = signingConfig.storeType // "jks"
}
}
signingConfig.storeType = storeType
}
for (def func : cdvPluginPostBuildExtras) {
func()
}
// This can be defined within build-extras.gradle as:
// ext.postBuildExtras = { ... code here ... }
if (hasProperty('postBuildExtras')) {
postBuildExtras()
}
My Plugins:
我的插件:
- cordova-android-support-v4 4.0.0 "Android Support v4"
- cordova-plugin-compat 1.0.0 "Compat"
- cordova-plugin-crosswalk-webview 1.7.0 "Crosswalk WebView Engine"
- cordova-plugin-device 1.1.2 "Device"
- cordova-plugin-dialogs 1.2.1 "Notification"
- cordova-plugin-file 4.2.0 "File"
- cordova-plugin-geolocation 2.2.0 "Geolocation"
- cordova-plugin-media 2.3.0 "Media"
- cordova-plugin-network-information 1.2.1 "Network Information"
- cordova-plugin-statusbar 2.1.3 "StatusBar"
- cordova-plugin-whitelist 1.2.2 "Whitelist"
- cordova-plugin-x-socialsharing 5.0.12 "SocialSharing"
- SDK Packages(all)
- SDK Tools(all)
- SDK Updates(all)
- cordova-android-support-v4 4.0.0“Android 支持 v4”
- 科尔多瓦插件兼容 1.0.0 “兼容”
- cordova-plugin-crosswalk-webview 1.7.0 “Crosswalk WebView 引擎”
- 科尔多瓦插件设备 1.1.2 “设备”
- cordova-plugin-dialogs 1.2.1 “通知”
- 科尔多瓦插件文件 4.2.0 “文件”
- cordova-plugin-geolocation 2.2.0“地理定位”
- 科尔多瓦插件媒体 2.3.0 “媒体”
- cordova-plugin-network-information 1.2.1 “网络信息”
- 科尔多瓦插件状态栏 2.1.3 “状态栏”
- 科尔多瓦插件白名单 1.2.2 “白名单”
- cordova-plugin-x-socialsharing 5.0.12“社交共享”
- SDK包(全部)
- SDK工具(全部)
- SDK 更新(全部)
The output error:
输出错误:
C:\Users\Olaf\Desktop\Projects\Example>cordova build android
ANDROID_HOME=C:\Users\Olaf\AppData\Local\Android\sdk
JAVA_HOME=C:\Program Files\java\jdk1.8.0_91
null
org.xwalk:xwalk_core_library_beta:18+
:preBuild UP-TO-DATE
:preArmv7DebugBuild UP-TO-DATE
:checkArmv7DebugManifest
:preX86DebugBuild UP-TO-DATE
:CordovaLib:preBuild UP-TO-DATE
:CordovaLib:preDebugBuild UP-TO-DATE
:CordovaLib:compileDebugNdk UP-TO-DATE
:CordovaLib:compileLint
:CordovaLib:copyDebugLint UP-TO-DATE
:CordovaLib:mergeDebugProguardFiles UP-TO-DATE
:CordovaLib:packageDebugRenderscript UP-TO-DATE
:CordovaLib:checkDebugManifest
:CordovaLib:prepareDebugDependencies
:CordovaLib:compileDebugRenderscript UP-TO-DATE
:CordovaLib:generateDebugResValues UP-TO-DATE
:CordovaLib:generateDebugResources UP-TO-DATE
:CordovaLib:packageDebugResources UP-TO-DATE
:CordovaLib:compileDebugAidl UP-TO-DATE
:CordovaLib:generateDebugBuildConfig UP-TO-DATE
:CordovaLib:generateDebugAssets UP-TO-DATE
:CordovaLib:mergeDebugAssets UP-TO-DATE
:CordovaLib:processDebugManifest UP-TO-DATE
:CordovaLib:processDebugResources UP-TO-DATE
:CordovaLib:generateDebugSources UP-TO-DATE
:CordovaLib:compileDebugJavaWithJavac UP-TO-DATE
:CordovaLib:processDebugJavaRes UP-TO-DATE
:CordovaLib:transformResourcesWithMergeJavaResForDebug UP-TO-DATE
:CordovaLib:transformClassesAndResourcesWithSyncLibJarsForDebug UP-TO-DATE
:CordovaLib:mergeDebugJniLibFolders UP-TO-DATE
:CordovaLib:transformNative_libsWithMergeJniLibsForDebug UP-TO-DATE
:CordovaLib:transformNative_libsWithSyncJniLibsForDebug UP-TO-DATE
:CordovaLib:bundleDebug UP-TO-DATE
:prepareAndroidCordovaLibUnspecifiedDebugLibrary UP-TO-DATE
:preArmv7ReleaseBuild UP-TO-DATE
:preX86ReleaseBuild UP-TO-DATE
:CordovaLib:preReleaseBuild UP-TO-DATE
:CordovaLib:compileReleaseNdk UP-TO-DATE
:CordovaLib:copyReleaseLint UP-TO-DATE
:CordovaLib:mergeReleaseProguardFiles UP-TO-DATE
:CordovaLib:packageReleaseRenderscript UP-TO-DATE
:CordovaLib:checkReleaseManifest
:CordovaLib:prepareReleaseDependencies
:CordovaLib:compileReleaseRenderscript UP-TO-DATE
:CordovaLib:generateReleaseResValues UP-TO-DATE
:CordovaLib:generateReleaseResources UP-TO-DATE
:CordovaLib:packageReleaseResources UP-TO-DATE
:CordovaLib:compileReleaseAidl UP-TO-DATE
:CordovaLib:generateReleaseBuildConfig UP-TO-DATE
:CordovaLib:generateReleaseAssets UP-TO-DATE
:CordovaLib:mergeReleaseAssets UP-TO-DATE
:CordovaLib:processReleaseManifest UP-TO-DATE
:CordovaLib:processReleaseResources UP-TO-DATE
:CordovaLib:generateReleaseSources UP-TO-DATE
:CordovaLib:compileReleaseJavaWithJavac UP-TO-DATE
:CordovaLib:processReleaseJavaRes UP-TO-DATE
:CordovaLib:transformResourcesWithMergeJavaResForRelease UP-TO-DATE
:CordovaLib:transformClassesAndResourcesWithSyncLibJarsForRelease UP-TO-DATE
:CordovaLib:mergeReleaseJniLibFolders UP-TO-DATE
:CordovaLib:transformNative_libsWithMergeJniLibsForRelease UP-TO-DATE
:CordovaLib:transformNative_libsWithSyncJniLibsForRelease UP-TO-DATE
:CordovaLib:bundleRelease UP-TO-DATE
:prepareComAndroidSupportSupportV42400Alpha2Library UP-TO-DATE
:prepareOrgXwalkXwalk_core_library_beta184847713Library UP-TO-DATE
:prepareArmv7DebugDependencies
:compileArmv7DebugAidl UP-TO-DATE
:compileArmv7DebugRenderscript UP-TO-DATE
:generateArmv7DebugBuildConfig UP-TO-DATE
:generateArmv7DebugAssets UP-TO-DATE
:mergeArmv7DebugAssets UP-TO-DATE
:createXwalkCommandLineFileArmv7Debug
:generateArmv7DebugResValues UP-TO-DATE
:generateArmv7DebugResources UP-TO-DATE
:mergeArmv7DebugResources UP-TO-DATE
:processArmv7DebugManifest UP-TO-DATE
:processArmv7DebugResources UP-TO-DATE
:generateArmv7DebugSources UP-TO-DATE
:compileArmv7DebugJavaWithJavac UP-TO-DATE
:compileArmv7DebugNdk UP-TO-DATE
:compileArmv7DebugSources UP-TO-DATE
:transformClassesWithDexForArmv7Debug
UNEXPECTED TOP-LEVEL EXCEPTION:
com.android.dex.DexException: Multiple dex files define Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompat$AccessibilityServiceInfoVersionImpl;
at com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:579)
at com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:535)
at com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:517)
at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:164)
at com.android.dx.merge.DexMerger.merge(DexMerger.java:188)
at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:504)
at com.android.dx.command.dexer.Main.runMonoDex(Main.java:334)
at com.android.dx.command.dexer.Main.run(Main.java:277)
at com.android.dx.command.dexer.Main.main(Main.java:245)
at com.android.dx.command.Main.main(Main.java:106)
FAILED
BUILD FAILED
Total time: 1 mins 24.646 secs
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':transformClassesWithDexForArmv7Debug'.
> com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'C:\Program Files\Java\jdk1.8.0_91\bin\java.exe'' finished with non-zero exit value 2
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
Error: Error code 1 for command: cmd with args: /s,/c,"C:\Users\Olaf\Desktop\Projects\Example\platforms\android\gradlew cdvBuildDebug -b C:\Users\Olaf\Desktop\Projects\Example\platforms\android\build.gradle -Dorg.gradle.daemon=true -Pandroid.useDeprecatedNdk=true"
Please, if you know the solution, tell me to continue with my projecto, thanks a lot!
请,如果您知道解决方案,请告诉我继续我的投影,非常感谢!
回答by j9k3r
I solved this problem by reseting all of the cordova plugins:
我通过重置所有的cordova插件解决了这个问题:
ionic state reset -- plugins
ionic state reset -- plugins
And then adding and removing the platforms
然后添加和删除平台
cordova platform remove android
, cordova platform add android
cordova platform remove android
, cordova platform add android
回答by Olaf
Well after few days of learning about this problem, I found a solution.
In my case, the solution was too simple because I only needed to remove android-support-v4.jar
from platforms/android/libs
in my Cordova project.
经过几天的学习这个问题,我找到了一个解决方案。就我而言,解决方案太简单了,因为我只需android-support-v4.jar
要从platforms/android/libs
我的 Cordova 项目中删除。
So, if you create a Cordova/Phonegap/Ionic
project, you have the tree like to
所以,如果你创建了一个Cordova/Phonegap/Ionic
项目,你就会有这样的树
ExampleProject/
- hooks/
- platforms/
- android
- ...
- libs/
- android-support-v4.jar <--- REMOVE!!
- ...
- plugins/
- ...
- www/
- ...
If you can't find the android-support-v4.jar
in the libs
folder, you can find it in your plugins
folder like this:
如果您android-support-v4.jar
在libs
文件夹中找不到,您可以在您的plugins
文件夹中找到它,如下所示:
ExampleProject/
- hooks/
- platforms/
- ...
- plugins/
- cordova-android-support-v4/
- android-support-v4.jar <--- REMOVE!!
- www/
- ...
Remember reload project with the command
cordova prepare <platform>
, where<platform>
is you platform likeios
,android
,windows
,firefox
, etc.In case of Phonegap you can use
phonegap prepare <platform>
.In case of Ionic you can use
ionic prepare <platform>
.
记住重装项目与命令
cordova prepare <platform>
,这里<platform>
是你的平台一样ios
,android
,windows
,firefox
,等。在 Phonegap 的情况下,您可以使用
phonegap prepare <platform>
.在 Ionic 的情况下,您可以使用
ionic prepare <platform>
.
Bye!
再见!
回答by Kateryna
I deleted in config.xml build the version of android and it's built successfully
我在 config.xml 中删除了构建 android 的版本,并且构建成功
回答by Mario Pacio
fix for me updating to [email protected]
修复我更新到 [email protected]
cordova platform add [email protected]