如何在IntelliJ IDEA中添加库(android-support-v7-appcompat)


68

我创建了一个项目,将资源文件复制到该项目的库中,并将其添加到项目结构中,并指定了样式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)

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


2
遇到相同的问题,请访问stackoverflow.com/a/18916738/183575,以找到一种简单而干净的方法来解决它。
RedGlyph 2013年


Answers:


83

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

  1. 创建一个支持库项目

  2. 将您的库项目从Eclipse项目导入Intellij(仅当您在Eclipse中创建了库时,此步骤才适用)。

  3. 右键单击模块,然后选择“打开模块设置”。

  4. v7 jar文件的安装库 v7 jar文件的安装库

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

  6. v7库模块的安装应用程序模块依赖性 v7库模块的安装应用程序模块依赖性


非常非常感谢,非常有帮助。
Alex Malkov

这至少节省了我几个小时。非常感谢!
Maciej Swic 2013年

3
您能否详细说明如何进入第5步?我将非常感谢...谢谢!
Andreas Wong 2014年

@SiGanteng步骤5时执行实际自动完成步骤1和2
胡杨

113

使用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


3
谢谢,但是我不使用Gradle。我在IntelliJ IDEA中没有Android Studio I程序
Alex Malkov

6
我主要是添加这个,以防其他人找到您的问题并使用Gradle。如果有人具有IntelliJ的Android插件并使用Gradle,则此方法应该有效。
奥斯汀·马奥尼

感谢您的添加。您是否曾经将支持库添加到android库项目,并尝试根据android库项目运行应用程序?我似乎总是在编译时收到“已添加”异常。不知道为什么-它仅添加在库项目中。
Eggman87 2013年

作为记录:它与普通IntelliJ的工作方式相同。完成安装“ Android支持存储库”后,您只需要“制作项目”。
jpkrohling 2014年

1
@ Eggman87我知道这很晚了,但是请尝试com.android.support:support-v4:+您的库项目。这将告诉它使用项目所提供的任何版本。
Austyn Mahoney 2014年

10

使用Maven

首先,您应该使用以下命令将android库安装到本地Maven存储库中 Maven Android SDK Deployer

然后您可以像这样向您的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>

部署人员无法为我工作。相反,我遵循以下步骤:1)转到ANDROID_HOME \ sdk \ extras \ android \ support \ v7 \ appcompat 2)创建整个库的zip文件,并将其命名为appcompat.apklib 3)在此位置打开cmd并键入“ mvn install :install-file -Dfile = appcompat.apklib -DgroupId = com.google.android -DartifactId = support-v7-appcompat -Dversion = r7 -Dpackaging = apklib“ 4)转到/ libs 5)键入“ mvn install:install-file -Dfile = android-support-v7-appcompat.jar -DgroupId = com.google.android -DartifactId = support-v7-appcompat -Dversion = r7 -Dpackaging = jar“ 6)添加适当的依赖项
bentzy 2014年


4

这是我的解决方案:

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

  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模块。

祝好运!


3

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

dependencies {

    //import of gridlayout
    compile 'com.android.support:gridlayout-v7:19.0.0'
    compile 'com.android.support:appcompat-v7:+'
}

4
要求提供最新版本的appcompat不是一个好主意。而是使用以下代码:
compile'c​​om.android.support:appcompat

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>

1

作为图书馆项目

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

部分>使用资源添加库

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

定义应用程序项目中的所有资源也可以(但是有很多定义要添加,但您错过了其中的一些定义),因此不建议这样做。


另请注意,如果您定义了从appcompat项目到项目的所有资源,则应检查R.java生成的文件是否在android.support.v7.appcompat软件包中。否则,android-support-v7-appcompat.jar将看不到资源
Antonio

1
我正在使用IDEA,请告诉我如何添加带有资源的库。他看到的资源可以编译,没有错误,但是当您开始发现错误时
Alex Malkov

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


support-v7不仅仅是一个简单的jar文件
Serob_b

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.