为旧平台运行Android示例EffectiveNavigation时出现ClassNotFindException

Rum*_*raK 8 android classnotfoundexception android-support-library

我正在运行实施有效导航 - EffectiveNavigation.zip中的示例- 它演示了一些活动中带有选项卡的滑动视图.它在较新的平台上运行良好,例如4.2.2(API17).

然后我想支持2.3.3(API10)等旧平台,所以我将minSdkVersion降低到4:

<uses-sdk android:minSdkVersion="10" android:targetSdkVersion="17"/>
Run Code Online (Sandbox Code Playgroud)

我确实通过以下方式之一包含支持库:

  1. 通过本书:V4 支持库设置 - 没有资源
  2. 或者通过本书:V7 支持库设置 - 包含资源
  3. 或右键单击项目 - > Android工具 - >添加支持库

无论如何,当我在2.3.3设备上运行应用程序时,会出现这种模糊的运行时异常,如下面的清单所示.

在之前已经提出请求之前请注意:我的问题是我无法在2.3.3这样的旧设备上运行它 - 但在4.2.2这样的新设备上运行正常.

我删除,重新导入并重建并重新运行各种模拟器上的各种更改设置.它只是不能在旧设备上运行(我的目的是在旧设备中使用选项卡和滑动视图).

 java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.android.effectivenavigation/com.example.android.effectivenavigation.MainActivity}: java.lang.ClassNotFoundException: com.example.android.effectivenavigation.MainActivity in loader dalvik.system.PathClassLoader[/data/app/com.example.android.effectivenavigation-1.apk]
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1569)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
    at android.app.ActivityThread.access$1500(ActivityThread.java:117)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:130)
    at android.app.ActivityThread.main(ActivityThread.java:3683)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:507)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
    at dalvik.system.NativeStart.main(Native Method)
 Caused by: java.lang.ClassNotFoundException: com.example.android.effectivenavigation.MainActivity in loader dalvik.system.PathClassLoader[/data/app/com.example.android.effectivenavigation-1.apk]
    at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:240)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:551)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
    at android.app.Instrumentation.newActivity(Instrumentation.java:1021)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1561)
Run Code Online (Sandbox Code Playgroud)

Rum*_*raK 14

经过一天一夜的浪费,终于解决了!

大多数问题是该应用程序还在实施ActionBar,并且需要更多的迁移工作.我不得不改变其他一些位来使用支持库(v4和v7),主要是:

Java文件中的代码更改:

<< import android.app.ActionBar;
<< import android.app.FragmentTransaction;
---
>> import android.support.v7.app.ActionBar;
>> import android.support.v4.app.FragmentTransaction;


<< public class MainActivity extends FragmentActivity implements ActionBar.TabListener {
---
>> public class MainActivity extends ActionBarActivity implements ActionBar.TabListener {


<< final ActionBar actionBar = getActionBar();
---
>> final ActionBar actionBar = getSupportActionBar();
Run Code Online (Sandbox Code Playgroud)

AndroidManifest.xml中的更改:

<< <uses-sdk android:minSdkVersion="14" />
---
>> <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17"/>

<< android:theme="@android:style/Theme.Holo.Light.DarkActionBar">
---
>> android:theme="@style/Theme.AppCompat.Light.DarkActionBar">
Run Code Online (Sandbox Code Playgroud)

这不是关于清理和重建项目,尽管你可以这样做,如果它让你感觉更好.

现在我的2.3.3 Android上有ActionBar和带有SwipeViews的Tabs.

谷歌非常重视这些反击,我必须使用它们,太糟糕了,没有更清晰,更完整的文档.除非我参考YouTube历史记录,否则我自己也很难找到该视频 - 甚至不知道我是如何找到它的.