web-dev-qa-db-ja.com

NoClassDefFoundError:次の解決に失敗しました:Landroid / support / v7 / appcompat / R $ styleable

Googleが提供するMy First Appチュートリアルを終了しようとする初心者。この致命的な例外に至るまでに、ActionBarActivity、EditText、Fragment、LayoutInflaterなどの多くの「解決できない」エラーを取り除くために、多くのランダムパッケージをインポートしましたが、これは重要ではありません。とにかく、メインアクティビティの[送信]ボタンをクリックすると、アプリがクラッシュし、致命的な例外が発生します。これが私のコードとlogcatファイルです。

MyActivity.Java(別名、チュートリアルのMainActivity.Java)

package magiccoupons.tutapp;

import Android.app.Activity;
import Android.content.Intent;
import Android.os.Bundle;
import Android.view.Menu;
import Android.view.MenuItem;
import Android.view.View;
import Android.widget.EditText;


public class MyActivity extends Activity {
public final static String EXTRA_MESSAGE = "com.example.myfirstapp.MESSAGE";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_my);
}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.my, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();
    if (id == R.id.action_settings) {
        return true;
    }
    return super.onOptionsItemSelected(item);
}

/** Called when the user clicks the Send button */
public void sendMessage(View view) {
    // Do something in response to button
    Intent intent = new Intent(this, DisplayMessageActivity.class);
    EditText editText = (EditText) findViewById(R.id.edit_message);
    String message = editText.getText().toString();
    intent.putExtra(EXTRA_MESSAGE, message);
    startActivity(intent);
}
}

DisplayMessageActivity.Java:

package magiccoupons.tutapp;

import Android.widget.*;
import Android.content.Intent;
import Android.os.Bundle;
import Android.view.MenuItem;
import Android.view.*;
import Android.support.v7.app.ActionBarActivity;
import Android.app.Fragment;

public class DisplayMessageActivity extends ActionBarActivity {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // Get the message from the intent
    Intent intent = getIntent();
    String message = intent.getStringExtra(MyActivity.EXTRA_MESSAGE);

    // Create the text view
    TextView textView = new TextView(this);
    textView.setTextSize(40);
    textView.setText(message);

    // Set the text view as the activity layout
    setContentView(textView);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();
    if (id == R.id.action_settings) {
        return true;
    }
    return super.onOptionsItemSelected(item);
}

/**
 * A placeholder fragment containing a simple view.
 *
public static class PlaceholderFragment extends Fragment {

    public PlaceholderFragment() { }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.activity_display_message,
                container, false);
        return rootView;
    }
}
*/
}

build.gradle:

 apply plugin: 'com.Android.application'

Android {
    compileSdkVersion 'Android-L'
    buildToolsVersion '20'

    defaultConfig {
        applicationId "magiccoupons.tutapp"
        minSdkVersion 20
        targetSdkVersion 20
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            runProguard false
            proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.Android.support:support-v4:20.0.0'
    //compile 'com.Android.support:appcompat-v7:21.0.0-rc1'
}

activity_my.xml:

    <LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:tools="http://schemas.Android.com/tools"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:orientation="horizontal"
    Android:paddingLeft="@dimen/activity_horizontal_margin"
    Android:paddingRight="@dimen/activity_horizontal_margin"
    Android:paddingTop="@dimen/activity_vertical_margin"
    Android:paddingBottom="@dimen/activity_vertical_margin"
    tools:context="magiccoupons.tutapp.MainActivity">

    <EditText Android:id="@+id/edit_message"
        Android:layout_weight="1"
        Android:layout_width="0dp"
        Android:layout_height="wrap_content"
        Android:hint="@string/edit_message" />
    <Button
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:text="@string/button_send"
        Android:onClick="sendMessage" />

</LinearLayout>

activity_display_message.xml:

<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:paddingLeft="@dimen/activity_horizontal_margin"
Android:paddingRight="@dimen/activity_horizontal_margin"
Android:paddingTop="@dimen/activity_vertical_margin"
Android:paddingBottom="@dimen/activity_vertical_margin"
tools:context="magiccoupons.tutapp.DisplayMessageActivity">

<TextView
    Android:text="@string/hello_world"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content" />

</RelativeLayout>

およびlogcat:

08-21 11:24:36.088    3645-3645/magiccoupons.tutapp I/Process﹕ Sending signal. PID: 3645 SIG: 9
08-21 11:37:33.584    4149-4149/magiccoupons.tutapp W/Resources﹕ Preloaded drawable resource #0x1080093 (Android:drawable/sym_def_app_icon) that varies with configuration!!
08-21 11:37:33.676    4149-4149/magiccoupons.tutapp I/am_on_resume_called﹕ [0,magiccoupons.tutapp.MyActivity]
08-21 11:37:33.905    4149-4149/magiccoupons.tutapp D/gralloc_goldfish﹕ Emulator without GPU emulation detected.
08-21 11:37:38.139    4149-4149/magiccoupons.tutapp I/am_on_paused_called﹕ [0,magiccoupons.tutapp.MyActivity]
08-21 11:37:38.218    4149-4149/magiccoupons.tutapp I/Choreographer﹕ Skipped 75 frames!  The application may be doing too much work on its main thread.
08-21 11:37:38.356    4149-4149/magiccoupons.tutapp D/AndroidRuntime﹕ Shutting down VM
08-21 11:37:38.369    4149-4149/magiccoupons.tutapp E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: magiccoupons.tutapp, PID: 4149
    Java.lang.NoClassDefFoundError: Failed resolution of: Landroid/support/v7/appcompat/R$styleable;
            at Android.support.v7.app.ActionBarActivityDelegate.onCreate(ActionBarActivityDelegate.Java:106)
            at Android.support.v7.app.ActionBarActivityDelegateICS.onCreate(ActionBarActivityDelegateICS.Java:57)
            at Android.support.v7.app.ActionBarActivity.onCreate(ActionBarActivity.Java:99)
            at magiccoupons.tutapp.DisplayMessageActivity.onCreate(DisplayMessageActivity.Java:15)
            at Android.app.Activity.performCreate(Activity.Java:5720)
            at Android.app.Instrumentation.callActivityOnCreate(Instrumentation.Java:1102)
            at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2208)
            at Android.app.ActivityThread.handleLaunchActivity(ActivityThread.Java:2317)
            at Android.app.ActivityThread.access$800(ActivityThread.Java:143)
            at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1258)
            at Android.os.Handler.dispatchMessage(Handler.Java:102)
            at Android.os.Looper.loop(Looper.Java:135)
            at Android.app.ActivityThread.main(ActivityThread.Java:5070)
            at Java.lang.reflect.Method.invoke(Native Method)
            at Java.lang.reflect.Method.invoke(Method.Java:372)
            at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:836)
            at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:631)
     Caused by: Java.lang.ClassNotFoundException: Didn't find class "Android.support.v7.appcompat.R$styleable" on path: DexPathList[[Zip file "/data/app/magiccoupons.tutapp-1.apk"],nativeLibraryDirectories=[/data/app-lib/magiccoupons.tutapp-1, /vendor/lib, /system/lib]]
            at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.Java:56)
            at Java.lang.ClassLoader.loadClass(ClassLoader.Java:511)
            at Java.lang.ClassLoader.loadClass(ClassLoader.Java:469)
            at Android.support.v7.app.ActionBarActivityDelegate.onCreate(ActionBarActivityDelegate.Java:106)
            at Android.support.v7.app.ActionBarActivityDelegateICS.onCreate(ActionBarActivityDelegateICS.Java:57)
            at Android.support.v7.app.ActionBarActivity.onCreate(ActionBarActivity.Java:99)
            at magiccoupons.tutapp.DisplayMessageActivity.onCreate(DisplayMessageActivity.Java:15)
            at Android.app.Activity.performCreate(Activity.Java:5720)
            at Android.app.Instrumentation.callActivityOnCreate(Instrumentation.Java:1102)
            at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2208)
            at Android.app.ActivityThread.handleLaunchActivity(ActivityThread.Java:2317)
            at Android.app.ActivityThread.access$800(ActivityThread.Java:143)
            at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1258)
            at Android.os.Handler.dispatchMessage(Handler.Java:102)
            at Android.os.Looper.loop(Looper.Java:135)
            at Android.app.ActivityThread.main(ActivityThread.Java:5070)
            at Java.lang.reflect.Method.invoke(Native Method)
            at Java.lang.reflect.Method.invoke(Method.Java:372)
            at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:836)
            at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:631)
    Suppressed: Java.lang.ClassNotFoundException: Android.support.v7.appcompat.R$styleable
            at Java.lang.Class.classForName(Native Method)
            at Java.lang.BootClassLoader.findClass(ClassLoader.Java:781)
            at Java.lang.BootClassLoader.loadClass(ClassLoader.Java:841)
            at Java.lang.ClassLoader.loadClass(ClassLoader.Java:504)
            ... 18 more
     Caused by: Java.lang.NoClassDefFoundError: Class "Landroid/support/v7/appcompat/R$styleable;" not found
            ... 22 more

私が何かを逃し、この質問が完全に不必要であり、および/またはだまされている場合は申し訳ありません。ありがとう。

20

次の理由により、このエラーが発生しています。

Gradleビルドファイルでは、アプリはAndroidのベータ版をターゲットとしてコンパイルし、現在も開発中です:

compileSdkVersion 'Android-L'
buildToolsVersion '20'

と同様

minSdkVersion 20
targetSdkVersion 20

最初に注意することは、Android-Lがフラッシュされていないデバイスでは、このアプリが(現時点では)正しく動作しないことです。

問題の本当の核心はDisplayMessageActivityにあり、継承[ActionBarActivity]を介して拡張されます:( https://developer.Android.com/reference/Android/support/v7/app/ActionBarActivity.html )これは、AppCompatのサポートライブラリクラスの1つです。

これを修正するには、最小SDKを10(14はアイスクリームサンドイッチ)に、最大SDKを19(Kit Kat)に変更し、依存関係のappcompat-v7ライブラリのコメントを解除します。

サイドノートとして、ウィジェットをそれぞれのアクティビティ/フラグメントで宣言するとき、通常、スコープをメソッドの外に置くことをお勧めします。

EditText editText;
Button sendMessageButton;

// Then in your onCreate() method
editText = (EditText) findViewById(R.id.editText);
sendMessageButton = (Button) findViewById(R.id.sendMessageButton);

これにより、メモリの再割り当てが削減され、コードが少し読みやすくなります。時にはルールを少し曲げる必要があるかもしれませんが、これは一般的な習慣です。

6
Patty P

「yourAppName\app」フォルダーの「build」フォルダーを削除しました

そしてすべてがうまくいきました。上記の解決策が機能しない場合は、これを試してください。プロジェクトを再度ビルドすると、ビルドフォルダーは自動生成されます。

3
Darshn

ただBuild->Clean Project
その後 Build->Rebuild Project
それで全部です。

1
ucMedia

私の場合、720p用に定義されたレイアウトがありましたが、デフォルトの解像度用には定義されていなかったため、クラッシュしていました。そのレイアウトファイルを追加すると、この問題は修正されました。logcatは嘘をつきません。

0
Hitesh Sahu