0

几个小时后,我终于构建了我的应用程序。使用 gradlew,它使用两个子模块构建。

每当我将结果安装到手机上时,它会自动在第一个创建的类(Activity)上抛出 UndefinedClass 错误

构建.gradle

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

dependencies {
    compile files('libs/android-support-v4.jar')
    compile files('libs/crittercism_v3_0_3_sdkonly.jar')
    compile project(':libraries:slidingmenu')
    compile project(':libraries:actionbarsherlock')
}

android {
    compileSdkVersion 17
    buildToolsVersion "17.0.0"

    defaultConfig {
        minSdkVersion 7
        targetSdkVersion 16
    }
}

一个 settings.gradle

include 'libraries:actionbarsherlock', ':libraries:slidingmenu', ':NewApp'

我有点迷茫,它正在建设中,但它显然没有将类添加到包中..

4

2 回答 2

1

为此,我已经迁移了我的 android 应用程序项目并且它可以工作。这就是我的构建的样子:

buildscript {
    repositories {
        mavenCentral()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:0.4'
    }
}

apply plugin: 'android'
apply plugin: 'eclipse'

repositories {
    mavenLocal()
    mavenCentral()
}

dependencies {
    compile 'com.google.guava:guava:14.0.1'
    compile 'com.google.code.gson:gson:2.2.4'
    compile 'commons-io:commons-io:2.4'
    compile 'pepuch:java-socket-server:1.0-SNAPSHOT'
    compile 'pepuch:multiplayergame-socket-server:1.0-SNAPSHOT'
}

android {
    compileSdkVersion 10
    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']

            resources.srcDirs = ['src']
            aild.srcDirs = ['src']

            renderscript.srcDirs = ['src']

            res.srcDirs = ['res']
            assets.srcDirs = ['assets']

        }


        instrumentTest.setRoot('tests')
    }
}

我还没有将它与任何 IDE 集成,但是在我运行gradle installDebug它之后,在我安装的手机上生成了 *.apk。顺便说一句,我没有更改项目结构,而是保存了旧的目录结构。

于 2013-06-09T07:25:18.493 回答
1

必须让它与 Android studio / Gradle 一起工作还不是很简单。我不得不说它的工作原理仍然很混乱,但在阅读了很多答案后我终于让它工作了。

如果您的项目具有这些依赖项:

  • 应用程序依赖于(Module1,Module2)
  • Module1 依赖于 (Module2)

  • 打开 SDK 管理器并安装Google 存储库Android 支持存储库

  • 为了让事情变得更简单,在 Gradle 期望的结构中移动文件。(我不知道其他结构是否会与 android 插件混淆)
  • 在每个 android 库清单中添加一个空应用程序。

包、uses-sdk 和空应用程序是 android-library 的严格最低要求:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="com.example.mymodule">
    <uses-sdk android:minSdkVersion="7" android:targetSdkVersion="16"/>
    <application />
</manifest>

模块具有这种结构

  • 模块/构建(构建事物的地方)
  • module/src/main/java(实际代码)
  • module/src/main/res(资源布局等)
  • 模块/src/main/AndroidManifest.xml
  • Module/build.gradle(我们的 gradle 配置)

我的第一个模块作为这个 build.gradle 文件

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.4'
    } } apply plugin: 'android-library'

repositories {
    mavenLocal()
    mavenCentral() }

dependencies {
    compile 'com.android.support:support-v4:13.0.0'
    compile project(':SecondModule') }

android {
    compileSdkVersion 17
    buildToolsVersion "17.0.0"

    defaultConfig {
        minSdkVersion 7
        targetSdkVersion 16
    }
}

请注意,模块依赖于 project(:SecondModule) 这意味着项目的根目录位于 SecondModule 中,其中还有一个 build.gradle 文件。

SecondModule build.gradle 看起来像这样。

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.4'
    }
}
apply plugin: 'android-library'

repositories {
    mavenLocal()
    mavenCentral()
}

dependencies {
    compile 'com.android.support:support-v4:13.0.0'
}

android {
    compileSdkVersion 17
    buildToolsVersion "17.0.0"

    defaultConfig {
        minSdkVersion 7
        targetSdkVersion 16
    }
}

第二个模块不依赖于任何东西,除了android support. 请注意,在这两个项目中,构建都使用mavenLocal()andmavenCentral()用于构建,而不仅仅是构建脚本。与默认的android-librarybuild.gradle 文件不同的是,这里我们com.android.support:support-v4:13.0.0从 maven 加载而不是 jar 文件。所以我们可以在每个模块中平静地添加依赖,而不用担心 gradle 会附加它 n 次。为此,您必须安装 google 存储库和 android 支持存储库。

MainApp gradle 文件如下所示:

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

repositories {
    mavenLocal()
    mavenCentral()
}

dependencies {
    compile 'com.android.support:support-v4:13.0.0'
    compile project(':MyModule')
    compile project(':SecondModule')
}

android {
    compileSdkVersion 17
    buildToolsVersion "17.0.0"

    defaultConfig {
        minSdkVersion 7
        targetSdkVersion 16
    }
}

此文件正在应用 android 插件而不是 android-library 插件。如果一切正常,它应该编译得很好并运行。此外,由于该项目恰好正在开发中,请确保您安装了最新版本,并且将来这个答案可能会变得毫无意义。

确保您从不使用 android 支持 jar,而是使用 maven 存储库。缺点是编译可能需要一段时间,但它会起作用。

于 2013-06-22T18:31:02.137 回答