70

我创建了一个项目,复制了项目、库中的资源文件,将其添加到项目结构中,规定了样式Theme.AppCompat。编译没有错误,但是当你开始降级时出现异常:

08-03 00:50:00.406: ERROR/AndroidRuntime(4055): FATAL EXCEPTION: main
        java.lang.NoClassDefFoundError: android.support.v7.appcompat.R$styleable
        at android.support.v7.app.ActionBarActivityDelegate.onCreate(ActionBarActivityDelegate.java:98)
        at android.support.v7.app.ActionBarActivityDelegateICS.onCreate(ActionBarActivityDelegateICS.java:58)
        at android.support.v7.app.ActionBarActivity.onCreate(ActionBarActivity.java:98)
        at com.example.SampleMetrRost.CentralActivity.onCreate(CentralActivity.java:12)
        at android.app.Activity.performCreate(Activity.java:4636)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1051)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1924)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1985)
        at android.app.ActivityThread.access$600(ActivityThread.java:127)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1151)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:137)
        at android.app.ActivityThread.main(ActivityThread.java:4476)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:511)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:816)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:583)
        at dalvik.system.NativeStart.main(Native Method)

请帮帮我。今天花了一整天。

4

9 回答 9

116

使用 Gradle

如果您使用的是 Gradle,则可以将其添加为compile依赖项。

指示

  1. 确保已Android Support Repository安装 SDK 包。Android Studio 在构建过程中自动识别这个存储库(不确定普通的 IntelliJ)。

    Android 支持存储库

  2. 将依赖项添加到{project}/build.gradle

    dependencies {
        compile 'com.android.support:appcompat-v7:+'
    }
    
  3. 单击Sync Project with Gradle Files按钮。

编辑: 看起来这些相同的说明在文档Adding libraries with resources -> Using Android Studio

于 2013-08-02T21:47:26.680 回答
85

没有 Gradle(单击此处获取 Gradle 解决方案

  1. 创建一个支持库项目

  2. 将您的库项目从 Eclipse 项目导入 Intellij(此步骤仅适用于您在 Eclipse 中创建库的情况)。

  3. 右键单击模块并选择打开模块设置。

  4. v7 jar 文件的设置库 v7 jar 文件的设置库

  5. v7的安装库模块 v7的安装库模块

  6. 设置 v7 库模块的应用程序模块依赖项 设置 v7 库模块的应用程序模块依赖项

于 2013-08-08T12:23:12.170 回答
10

使用 Maven

首先,您应该使用Maven Android SDK Deployer将 android 库安装到本地 maven 存储库

然后你可以像这样向你的 pom 添加依赖:

    <dependency>
        <groupId>android.support</groupId>
        <artifactId>compatibility-v7-appcompat</artifactId>
        <version>${compatibility.version}</version>
        <type>apklib</type>
    </dependency>

    <dependency>
        <groupId>android.support</groupId>
        <artifactId>compatibility-v7-appcompat</artifactId>
        <version>${compatibility.version}</version>
        <type>jar</type>
    </dependency>
于 2013-09-03T09:09:58.777 回答
4

这是我的解决方案:

  1. 复制并粘贴 $ANDROID_SDK/extras/android/support/v7/appcompat 到您的项目 ROOT

  2. 在 Intellij 上打开“项目结构”,单击“项目设置”上的“模块”,然后单击“appcompat”->“android”,确保选中“库模块”复选框。

  3. 点击“appcompat”下的“YOUR-PROJECT_NAME”,删除“android-support-v4”和“android-support-v7-compat”;确保选中“appcompat”之前的复选框。并且,单击“确定”关闭“项目结构”对话框。

  4. 回到主窗口,点击左上角项目区域的“appcompat”->“libs”。右键单击“android-support-v4”,选择菜单项“添加为库”,将“添加到模块”更改为“您的项目”。与“android-support-v7-compat”相同。

完成上述操作后,intellij 应该能够正确找到 android-support-XXXX 模块。

祝你好运!

于 2014-07-01T07:29:23.827 回答
4

另一个简单的解决方案是将这些行粘贴到 build.gradle 文件中

dependencies {

    //import of gridlayout
    compile 'com.android.support:gridlayout-v7:19.0.0'
    compile 'com.android.support:appcompat-v7:+'
}
于 2015-08-18T14:28:07.630 回答
3

maven的另一个解决方案(至少对我来说也是一个更好的解决方案)是使用本地 android SDK 中包含的 maven 存储库。为此,只需在 pom 中添加一个指向本地 android SDK 的新存储库:

<repository>
    <id>android-support</id>
    <url>file://${env.ANDROID_HOME}/extras/android/m2repository</url>
</repository>

添加此存储库后,您可以添加标准的 Google 依赖项,如下所示:

<dependency>
    <groupId>com.android.support</groupId>
    <artifactId>support-v13</artifactId>
    <version>${support-v13.version}</version>
</dependency>

<dependency>
    <groupId>com.android.support</groupId>
    <artifactId>appcompat-v7</artifactId>
    <version>${appcompat-v7.version}</version>
    <type>aar</type>
</dependency>
于 2015-03-19T19:46:56.333 回答
1

作为图书馆项目

您应该按照http://developer.android.com/tools/support-library/setup.html在库项目中添加资源

部分 > 添加带有资源的库

然后将android-support-v7-appcompat库添加到工作区中,然后将其添加为对应用程序项目的引用。

在你的应用项目中定义所有资源也可以(但是有很多定义要添加,你错过了一些),这不是推荐的方法。

于 2013-08-02T21:15:40.167 回答
0

这是我的解决方案,它与上一个非常相似:

<dependency>
        <groupId>com.google.android</groupId>
        <artifactId>support-v7</artifactId>
        <scope>system</scope>
        <systemPath>${android.home}/support/v7/appcompat/libs/android-support-v7-appcompat.jar</systemPath>
        <version>19.0.1</version>
</dependency>

其中 {android.home} 是 Android SDK 的根目录,它使用systemPath而不是repository

于 2015-05-06T15:51:15.367 回答
0

作为对Austyn Mahoney 答案的更新,配置“编译”已过时,已被“实施”和“API”取代。

它将在 2018 年底被删除。有关更多信息,请参见此处

于 2018-08-22T00:57:21.117 回答