app:transformClassesWithDexForDebug,包含多个模块

时间:2017-03-25 20:06:30

标签: java android

我试图创建一个依赖于来自java库模块的java代码的android应用程序,但每当我尝试使用该java库中的任何对象时,我总是得到以下内容

任务执行失败':app:transformClassesWithDexForDebug'。

  

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_121 \ bin \ java.exe''完成非零退出值1

我已经查看了以下Execution failed for task ':app:transformClassesWithDexForDebug' while implementing Google sign in for Android并且我已经尝试过几乎所有的建议,但它仍然无法构建。我的java库确实使用了android使用的json库,我得到了一些关于它的警告,但它说它只会被忽略

这是我的build.gradle

apply plugin: 'com.android.application'

android {
    compileSdkVersion 25
    buildToolsVersion "25.0.2"

    defaultConfig {
        applicationId "pwils33.familymap"
        minSdkVersion 23
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
        multiDexEnabled true
    }
    buildTypes {
        debug {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    dexOptions {
        javaMaxHeapSize "4g"
        preDexLibraries false
        incremental true
    }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    testCompile 'junit:junit:4.12'
    compile project(':shared')
    compile 'com.android.support:appcompat-v7:25.3.0'
    compile 'com.android.support:support-v4:25.3.0'
    compile 'com.android.support:multidex:1.0.1'
}

我将该模块用于我已经构建的另一个Java应用程序,因此我无法将其转换为android库。任何帮助将不胜感激

编辑我已尝试将我的应用程序设为多dex应用程序,但也无法正常工作,此处是我的应用程序清单

<?xml version="1.0" encoding="utf-8"?>
<manifest package="pwils33.familymap"
        xmlns:android="http://schemas.android.com/apk/res/android">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme"
        android:name="android.support.multidex.MultiDexApplication">
        <activity android:name=".activities.MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
    </application>

</manifest>

3 个答案:

答案 0 :(得分:0)

尝试以下代码来解决您的问题:

parseProfileResponse

答案 1 :(得分:0)

在您应用的模块multidex文件中加入build.gradle库:

compile 'com.android.support:multidex:1.0.1'

然后通过添加:

defaultConfig部分启用多索引
multiDexEnabled true 

如果您没有覆盖Application,请修改清单<Application>代码,然后添加:

<application
        android:name="android.support.multidex.MultiDexApplication">

如果您覆盖Application类,请从MultiDexApplication类(来自上述multidex库扩展它:

public class AndroidApplication extends MultiDexApplication { ... }

如果你覆盖Application类并且它实际上扩展了其他类(例如因为使用经常需要从它的类扩展的ORM库),请通过从{{1}调用来安装multidex }:

attachBaseContext

Google's documentation中提供了更多详细信息。

答案 2 :(得分:0)

我终于明白了。事实证明,多索引库不支持1.8,因为我的计算机上有java 8,当它从我的java模块中找到编译后的代码时,它就破坏了它。我将以下几行添加到我的build.gradle到我的java模块,最后让它工作

sourceCompatibility = 1.7
targetCompatibility = 1.7

dependencies {
...
}