【发布时间】:2016-02-04 20:11:41
【问题描述】:
我通常按照步骤将我的应用程序转换为库项目,方法是将build.gradle 更新为具有apply plugin: 'com.android.library',然后通过将其添加到settings.gradle 和build.gradle 将其包含在我的其他应用程序中。
当我在已添加库的应用程序上进行 gradle 同步时,我可以看到库项目已编译。但是,我无法从应用程序内调用或访问库中的代码。这样做的正确方法是什么?
库项目是一个具有MainActivity 的应用程序,其行为通常与任何 Android 应用程序一样。是否需要做其他任何事情才能使其成为一个合适的库项目?
从包含库的应用程序从库中启动 Activity 时出现异常:
java.lang.RuntimeException:无法实例化活动 组件信息{myapp.debug/mylib.MainActivity}: java.lang.ClassNotFoundException:找不到类 路径上的“mylib.MainActivity”:DexPathList [[zip 文件 "/data/app/myapp.debug-2/base.apk"],nativeLibraryDirectories=[/vendor/lib, /系统/库]] 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2236) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387) 在 android.app.ActivityThread.access$800(ActivityThread.java:151) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:135) 在 android.app.ActivityThread.main(ActivityThread.java:5254) 在 java.lang.reflect.Method.invoke(本机方法) 在 java.lang.reflect.Method.invoke(Method.java:372) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 引起:java.lang.ClassNotFoundException:找不到类 路径上的“mylib.MainActivity”:DexPathList [[zip 文件 "/data/app/myapp.debug-2/base.apk"],nativeLibraryDirectories=[/vendor/lib, /系统/库]] 在 dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:511) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:469) 在 android.app.Instrumentation.newActivity(Instrumentation.java:1066) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2226) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387) 在 android.app.ActivityThread.access$800(ActivityThread.java:151) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:135) 在 android.app.ActivityThread.main(ActivityThread.java:5254) 在 java.lang.reflect.Method.invoke(本机方法) 在 java.lang.reflect.Method.invoke(Method.java:372) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 抑制:java.lang.ClassNotFoundException: com.janacare.aina.MainActivity 在 java.lang.Class.classForName(本机方法) 在 java.lang.BootClassLoader.findClass(ClassLoader.java:781) 在 java.lang.BootClassLoader.loadClass(ClassLoader.java:841) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:504) ... 13 更多 引起:java.lang.NoClassDefFoundError: Class not found using the 引导类加载器;没有可用的堆栈
【问题讨论】:
-
举一个你想调用的代码示例。这是你想开始的活动吗?是类中的静态方法吗?
-
这是一项活动。通过意图启动。我在尝试这样做时收到了
ClassNotFoundException。 -
显示您应用的 manifest.xml,以及您用于从您的库中启动 Activity 的代码以及您收到的完整错误消息
-
您是否将您的库作为依赖项添加到您的应用程序中?你能展示你的其他应用 build.gradle 吗?
-
我已将
compile project(':mylibraryproject')添加到我的build.gradle的dependencies部分,并且我已添加include ':mylibraryproject'project(':mylibraryproject').projectDir = new File('mylibraryproject/ProjectName' )` 到应用程序的settings.gradle。
标签: java android android-studio gradle android-library