Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么我仍然得到java.lang.NoClassDefFoundError:android.support.v7.appcompat.R$attr?_Java_Android_Gradle - Fatal编程技术网

为什么我仍然得到java.lang.NoClassDefFoundError:android.support.v7.appcompat.R$attr?

为什么我仍然得到java.lang.NoClassDefFoundError:android.support.v7.appcompat.R$attr?,java,android,gradle,Java,Android,Gradle,因此,我正在开发一款俗气的应用程序,在我开始公司真正的应用程序项目之前,我会发布一些帖子来训练自己使用安卓系统。我遇到了一个让我很难受的错误 我得到了一个要使用的库依赖项列表,并设置了build.gradle文件以加载它们。它同步很好,因此我认为就我所知,它是正确的: dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:appcompat-v7:

因此,我正在开发一款俗气的应用程序,在我开始公司真正的应用程序项目之前,我会发布一些帖子来训练自己使用安卓系统。我遇到了一个让我很难受的错误

我得到了一个要使用的库依赖项列表,并设置了build.gradle文件以加载它们。它同步很好,因此我认为就我所知,它是正确的:

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:22.1.1'
    compile 'com.google.android.gms:play-services:7.3.0'
    compile 'com.squareup.okhttp:okhttp:2.3.0'
    compile 'com.squareup.retrofit:retrofit:1.7.0'
    compile 'com.google.code.gson:gson:2.3'
    compile 'com.squareup.dagger:dagger:1.2.2'
    compile 'com.squareup.dagger:dagger-compiler:1.2.2'
    compile 'com.squareup.picasso:picasso:2.5.2'
    compile 'com.android.support:recyclerview-v7:22.1.1'
    compile 'com.squareup:otto:1.3.7'
    compile 'com.path:android-priority-jobqueue:1.1.2'
    compile 'io.realm:realm-android:0.80.1'
    compile 'com.jakewharton:butterknife:6.1.0'
    compile 'com.android.support:multidex:1.0.0'
    compile 'com.android.support:appcompat-v7:22.1.1'
}
我已经安装了android支持库和存储库:

但我仍然尝试启动该应用程序,并获得以下堆栈跟踪:

java.lang.NoClassDefFoundError: android.support.v7.appcompat.R$attr
        at android.support.v7.app.AppCompatDelegateImplV7.ensureSubDecor(AppCompatDelegateImplV7.java:286)
        at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:246)
        at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:106)
        at com.anglersatalas.twitstagram.MainActivity.onCreate(MainActivity.java:23)
        at android.app.Activity.performCreate(Activity.java:5451)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1093)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2298)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2392)
        at android.app.ActivityThread.access$900(ActivityThread.java:169)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1280)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:146)
        at android.app.ActivityThread.main(ActivityThread.java:5487)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:515)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)
        at dalvik.system.NativeStart.main(Native Method)
我所看到的Stack Overflow上其他地方的解决方案都是添加appcompat v7库,正如他们在android网站上所说的那样,我已经在上面演示了我所做的。我一辈子都搞不懂为什么这种事还在发生。查看堆栈跟踪,它在setContentView()方法的my MainActivity中中断:

package com.anglersatalas.twitstagram;
导入android.os.Bundle;
导入com.anglersatalas.twitstagram.R;
导入android.support.v7.app.AppActivity;
导入android.view.Menu;
导入android.view.MenuItem;
导入android.widget.TextView;
导入com.anglersatalas.twitstagram.api.PostService;
导入com.anglersatalas.twitstagram.models.Post;
导入java.util.List;
进口改装.RestAdapter;
公共类MainActivity扩展了AppCompatActivity{
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(com.anglersatalas.twitstagram.R.layout.activity_main);
TextView tv=(TextView)findViewById(com.anglersatalas.twitstagram.R.id.TextView);
RestAdapter adapter=new RestAdapter.Builder()
.setEndpoint(“10.0.0.248/testserver/backend/web”)
.build();
PostService=adapter.create(PostService.class);
List=service.getPosts();
字符串str=“”;
对于(职位p:列表){
str+=String.format(“%s\n”,p);
}
tv.setText(str);
}
...
}
单击调用引发异常的方法的类文件,它显示找不到“android.support.v7.appcompat.R;”:


我的同事和我都不知所措。关于如何解决这个问题有什么建议吗?

我只是花了几个小时来解决这个问题,并且我能够解决它

事实证明,我已经超过了dex限制,在defaultConfig下的build.gradle文件中确实启用了Multidex true,但对于5.0之前的设备,我似乎缺少了一些其他东西

defaultConfig { 
...
        multiDexEnabled true 
... }
我首先用以下内容检查我的方法计数:

我是在67952方法

然后我更新了build.gradle以添加多索引支持

dependencies {
...
compile 'com.android.support:multidex:1.0.0'
... }
然后,我更新了我的应用程序(我们已经有了自己的应用程序),以从Multidex应用程序扩展

package com.me.myapp
...
public class Application extends MultiDexApplication {}
<application
...
android:name="com.me.myapp.Application" />
以下是我用来正确实现multidex的文档中的两个链接:

确保清单中的应用程序指向自定义多索引应用程序

package com.me.myapp
...
public class Application extends MultiDexApplication {}
<application
...
android:name="com.me.myapp.Application" />

我在上面花了几个小时,现在问题解决了

一些Android应用程序的一个约束是底层编译的.dex文件可以支持的方法总数。它受16位或65536个值的限制

当您在应用程序中包含第三方库时,它们的所有方法都将保存在.dex文件中。更大的API,比如Google Play服务中包含的API,将很快开始进入极限

有关详细信息:

在我的例子中,我在我的应用程序中使用Google Play服务进行Google/Youtube身份验证

编译'com.google.android.gms:play services:7.3.0'

所以我把它改成了

编译'com.google.android.gms:play services identity:7.3.0'

因为我只是出于身份验证目的才需要它。 因此,您可以根据需要选择单个库

例如,如果您只想使用地图,那么您应该:

编译'com.google.android.gms:play services地图:7.3.0'

同样的位置

编译'com.google.android.gms:play services位置:7.3.0'


我希望它能帮助你

这是一个生成的文件。我建议使用
Build>Clean
。我也这样做过。它似乎没有任何效果,因为它是“丢失”的导入库的R文件,而不是我的。我在引号中加了missing,因为我可以在项目侧栏中看到它。删除该R文件,然后尝试[Invalidate Cache and Restart IDE]不确定该错误,但我看到了解决后将出现的另一个错误。你有
编译'com.google.android.gms:play services:7.3.0'
但是你没有安装google play services。这看起来非常有希望!我将在一个地方结束,我将不得不添加多索引支持,但在这期间,因为我没有得到任何地方,我重新启动从零开始,并没有任何问题。谢谢你的回答!我应该把它标记为正确的吗?我不知道是不是还没到,但我要过一段时间才能再次到达那里。我对实际使用堆栈溢出非常陌生。它对我们有效,我们也遇到了完全相同的问题。。我们甚至开始重新编写代码。。你可以做一件事来仔细检查它是否有效。假设您的build.gradle默认值中有multi-dex anable,请在5.0设备上运行它,它应该可以正常运行。。任何小于5.0的东西都不能处理多重索引。谢谢。这救了我们。我喜欢你提问的方式,汉克斯!它似乎已经解决了我的问题,所以我将其标记为正确答案。扩展多索引应用程序为我解决了类似的问题。但它不是在5.0之前的设备上,而是在4.4之前的设备上。。。。谢谢。谢谢,这真的帮助了我,我甚至不需要添加多索引依赖项