更新Android SDK工具后无法运行应用程序

时间:2013-06-20 01:02:35

标签: android eclipse sdk android-fragmentactivity

当我将Android SDK工具更新到22.0.1版时,我无法再运行我的应用了。 我启动应用程序并收到此错误:

06-19 20:44:47.297: D/AndroidRuntime(370): Shutting down VM
06-19 20:44:47.337: E/AndroidRuntime(370): FATAL EXCEPTION: main
06-19 20:44:47.337: E/AndroidRuntime(370): java.lang.RuntimeException: Unable to   instantiate activity      ComponentInfo{com.android.app.dictionary/com.android.app.dictionary.activity.MainActivity}: java.lang.ClassNotFoundException: com.android.app.dictionary.activity.MainActivity in loader dalvik.system.PathClassLoader[/data/app/com.android.app.dictionary-2.apk]
06-19 20:44:47.337: E/AndroidRuntime(370):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2585)
06-19 20:44:47.337: E/AndroidRuntime(370):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
06-19 20:44:47.337: E/AndroidRuntime(370):  at android.app.ActivityThread.access$2300(ActivityThread.java:125)
06-19 20:44:47.337: E/AndroidRuntime(370):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
06-19 20:44:47.337: E/AndroidRuntime(370):  at android.os.Handler.dispatchMessage(Handler.java:99)
06-19 20:44:47.337: E/AndroidRuntime(370):  at android.os.Looper.loop(Looper.java:123)
06-19 20:44:47.337: E/AndroidRuntime(370):  at android.app.ActivityThread.main(ActivityThread.java:4627)
06-19 20:44:47.337: E/AndroidRuntime(370):  at java.lang.reflect.Method.invokeNative(Native Method)
06-19 20:44:47.337: E/AndroidRuntime(370):  at java.lang.reflect.Method.invoke(Method.java:521)
06-19 20:44:47.337: E/AndroidRuntime(370):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
06-19 20:44:47.337: E/AndroidRuntime(370):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
06-19 20:44:47.337: E/AndroidRuntime(370):  at dalvik.system.NativeStart.main(Native Method)
06-19 20:44:47.337: E/AndroidRuntime(370): Caused by: java.lang.ClassNotFoundException: com.android.app.dictionary.activity.MainActivity in loader dalvik.system.PathClassLoader[/data/app/com.android.app.dictionary-2.apk]
06-19 20:44:47.337: E/AndroidRuntime(370):  at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:243)
06-19 20:44:47.337: E/AndroidRuntime(370):  at java.lang.ClassLoader.loadClass(ClassLoader.java:573)
06-19 20:44:47.337: E/AndroidRuntime(370):  at java.lang.ClassLoader.loadClass(ClassLoader.java:532)
06-19 20:44:47.337: E/AndroidRuntime(370):  at android.app.Instrumentation.newActivity(Instrumentation.java:1021)
06-19 20:44:47.337: E/AndroidRuntime(370):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2577)
06-19 20:44:47.337: E/AndroidRuntime(370):  ... 11 more
06-19 20:44:56.478: I/Process(370): Sending signal. PID: 370 SIG: 9
06-19 20:52:36.868: W/dalvikvm(400): Unable to resolve superclass of Lcom/android/app/dictionary/activity/MainActivity; (31)
06-19 20:52:36.868: W/dalvikvm(400): Link of class 'Lcom/android/app/dictionary/activity/MainActivity;' failed
06-19 20:52:36.898: D/AndroidRuntime(400): Shutting down VM
06-19 20:52:36.898: W/dalvikvm(400): threadid=1: thread exiting with uncaught exception (group=0x4001d800)

这是我的主要课程:

public class DetailtFragment extends Fragment implements OnClickListener {
static Button btnAdd, btnListen, btnView, btnGame, btnGame2;
FragmentActivity activity;
static TextView tvWord, tvDetailt;
static Context mContext;
static ImageView imgView;
static File cacheDir, mp3;
static Bitmap bmp;
MediaPlayer mediaPlayer;
static Handler mHandler = new Handler();
boolean firstRun = true;

static SharedPreferences preferences;

public static Fragment newInstance(Context context) {
    DetailtFragment f = new DetailtFragment();
    return f;
}

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onActivityCreated(savedInstanceState);
    activity = getActivity();
    mContext = activity;
}

@Override
public void onAttach(Activity activity) {
    // TODO Auto-generated method stub
    super.onAttach(activity);
    mediaPlayer = new MediaPlayer();

    String newFolder = "/dictionary";
    String extStorageDirectory = Environment.getExternalStorageDirectory()
            .toString();
    cacheDir = new File(extStorageDirectory + newFolder);
    if (!cacheDir.exists()) {
        cacheDir.mkdir();
    }
    preferences = activity.getSharedPreferences(Constants.PREF, 0);

}

@Override
public void onStart() {
    // TODO Auto-generated method stub
    super.onStart();
    if (!firstRun) {
        return;
    }
    String saved_word = preferences.getString(Constants.PREF_WORD, "");
    if (saved_word.trim().length() > 0) {
        WordDatabase db = new WordDatabase(activity);
        db.open();
        WordDTO saved_word_dto = db.getByName(saved_word);
        showWordDetailt(saved_word_dto);
        db.close();
    }
    firstRun = false;
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    ViewGroup root = (ViewGroup) inflater.inflate(R.layout.detailt, null);
    btnAdd = (Button) root.findViewById(R.id.btnAddNew);
    btnListen = (Button) root.findViewById(R.id.btnListen);
    tvWord = (TextView) root.findViewById(R.id.tvWord);
    tvDetailt = (TextView) root.findViewById(R.id.tvDetailt);
    imgView = (ImageView) root.findViewById(R.id.imgDetailt);
    btnView = (Button) root.findViewById(R.id.btnView);
    btnGame = (Button) root.findViewById(R.id.btnGame);
    btnGame2 = (Button) root.findViewById(R.id.btnGame2);

    btnAdd.setOnClickListener(this);
    btnListen.setOnClickListener(this);

    btnView.setOnClickListener(this);
    btnGame.setOnClickListener(this);
    btnGame2.setOnClickListener(this);
    return root;
}

public static void showWordDetailt(WordDTO word) {
    if (word == null) {
        return;
    }

    Constants.word = word;
    if (preferences != null) {
        Editor edit = preferences.edit();
        edit.putString(Constants.PREF_WORD, word.getWord());
        edit.commit();
    }

    final String name;
    String pronunce, mean, type, msg;
    String br = "<br>";
    String tab = "&emsp;";
    String mean1, mean2, mean3, mean4, mean5;
    pronunce = word.getPronunce();
    mean = word.getMean();
    type = word.getType();
    name = word.getWord();
    mean1 = word.getMean1();
    mean2 = word.getMean2();
    mean3 = word.getMean3();
    mean4 = word.getMean4();
    mean5 = word.getMean5();

    tvWord.setText(name);
    msg = "";

    if (pronunce != null && pronunce.trim().length() > 0) {
        msg = "<b>Phát âm:</b>" + br + tab + pronunce + br + br;
    }
    msg += "<b>Loại từ:</b>" + br + tab + type + br + br;
    msg += "<b>Nghĩa:</b>" + br + tab + "- " + mean;

    if (mean1 != null) {
        msg += br + tab + "- " + mean1;
    }
    if (mean2 != null) {
        msg += br + tab + "- " + mean2;
    }
    if (mean3 != null) {
        msg += br + tab + "- " + mean3;
    }
    if (mean4 != null) {
        msg += br + tab + "- " + mean4;
    }
    if (mean5 != null) {
        msg += br + tab + "- " + mean5;
    }

    tvDetailt.setText(Html.fromHtml(msg));

    btnListen.setEnabled(false);
    imgView.setImageDrawable(mContext.getResources().getDrawable(
            R.drawable.default_image));

    new Thread(new Runnable() {

        @Override
        public void run() {
            // TODO Auto-generated method stub
            getImageAndSoundFromResource(name);
        }

    }).start();
}

private static void getImageAndSoundFromResource(String wordname) {
    // TODO Auto-generated method stub
    Context context = mContext.getApplicationContext();
    InputStream imageIs = null;
    InputStream soundIs = null;
    try {
        imageIs = context.getResources().getAssets()
                .open(wordname + ".jpg");
        soundIs = context.getResources().getAssets()
                .open(wordname + ".mp3");
    } catch (IOException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }

    if (imageIs != null) {
        try {
            bmp = BitmapFactory.decodeStream(imageIs);
            setImage(bmp);

        } catch (NotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    if (soundIs != null) {
        try {
            byte[] soundBytes = convertInputStreamToByteArray(soundIs);
            try {
                if (mp3 != null && mp3.exists()) {
                    mp3.delete();
                }
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            // create temp file that will hold byte array
            mp3 = File.createTempFile(wordname, "mp3", cacheDir);
            mp3.deleteOnExit();
            FileOutputStream fos = new FileOutputStream(mp3);
            fos.write(soundBytes);
            fos.close();

            setEnableButton(true);

        } catch (IOException ex) {
            ex.printStackTrace();
            setEnableButton(false);
        }
    }
}

private static byte[] convertInputStreamToByteArray(InputStream is)
        throws IOException {
    ByteArrayOutputStream buffer = new ByteArrayOutputStream();

    int nRead;
    byte[] data = new byte[16384];

    while ((nRead = is.read(data, 0, data.length)) != -1) {
        buffer.write(data, 0, nRead);
    }

    buffer.flush();

    return buffer.toByteArray();
}

private static void setImage(final Bitmap bmp) {
    mHandler.post(new Runnable() {

        @Override
        public void run() {
            // TODO Auto-generated method stub
            if (bmp != null) {
                imgView.setImageBitmap(bmp);
            }
        }
    });
}

private static void setEnableButton(final boolean enabled) {
    mHandler.post(new Runnable() {

        @Override
        public void run() {
            // TODO Auto-generated method stub
            btnListen.setEnabled(enabled);
        }
    });
}

private void playSound(File mp3) {
    if (mp3 == null){
        return;
    }
    try {
        FileInputStream fis = new FileInputStream(mp3);
        mediaPlayer.reset();
        mediaPlayer.setDataSource(fis.getFD());

        mediaPlayer.prepare();
        mediaPlayer.start();
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IllegalArgumentException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IllegalStateException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

@Override
public void onDestroy() {
    // TODO Auto-generated method stub
    super.onDestroy();
    try {
        if (mp3 != null && mp3.exists()) {
            mp3.delete();
        }
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

@Override
public void onClick(View v) {
    // TODO Auto-generated method stub
    int id = v.getId();
    switch (id) {
    case R.id.btnAddNew:
        Intent addIntent = new Intent(mContext, AddNewWordActivity.class);
        mContext.startActivity(addIntent);
        break;
    case R.id.btnListen:
        playSound(mp3);
        break;
    case R.id.btnView:
        if (Constants.word != null) {
            Intent detailtIntent = new Intent(mContext,
                    Detailt2Activity.class);
            mContext.startActivity(detailtIntent);
        }
        break;
    case R.id.btnGame:
        List<WordDTO> list = MainActivity.getStarredList();
        if (list.size() >= 5) {
            Intent gameIntent = new Intent(mContext, GameActivity.class);
            mContext.startActivity(gameIntent);
        } else {
            AlertDialog.Builder bl = new AlertDialog.Builder(mContext);
            bl.setMessage(getString(R.string.alert_less_than_5));
            bl.setNeutralButton(getString(android.R.string.ok),
                    new DialogInterface.OnClickListener() {

                        @Override
                        public void onClick(DialogInterface arg0, int arg1) {
                            // TODO Auto-generated method stub

                        }
                    });

            bl.show();
        }
        break;

    case R.id.btnGame2:
        List<WordDTO> list2 = MainActivity.getStarredList();
        if (list2.size() >= 5) {
            Intent gameIntent = new Intent(mContext,
                    GameReverseActivity.class);
            mContext.startActivity(gameIntent);
        } else {
            AlertDialog.Builder bl = new AlertDialog.Builder(mContext);
            bl.setMessage(getString(R.string.alert_less_than_5));
            bl.setNeutralButton(getString(android.R.string.ok),
                    new DialogInterface.OnClickListener() {

                        @Override
                        public void onClick(DialogInterface arg0, int arg1) {
                            // TODO Auto-generated method stub

                        }
                    });

            bl.show();
        }
        break;
    default:
        break;
    }
}

}

我正在使用SDK工具版本22.0.1和Eclipse Juno 4.2.2 谢谢你的帮助。

2 个答案:

答案 0 :(得分:2)

右键点击您的项目,点击Java Build Path,然后在Order and Export下,确保同时选中Android Private Libraries

然后清理您的项目并再次尝试运行。

enter image description here

答案 1 :(得分:0)

以下是本文中提供的一系列解决方案。

Can no longer launch apps after upgrding to android sdk tools 20/platform sdk tools 12

不幸的是,建议的解决方案是卸载和重新安装是用户为了运营您的业务而选择的最佳选择