【问题标题】:In android create a jar inside jar and accessing the classes of first jar在android中创建一个jar里面的jar并访问第一个jar的类
【发布时间】:2014-12-03 13:00:17
【问题描述】:

我的问题很简单,是否可以在 android 的 jar 中创建一个 jar。

就像我有一个 first.jar 文件,我在另一个项目类中使用 first.jar 类方法,例如

在 first.jar 我有类 TestApp1Class,

public class TestApp1Class {

public static void testMethod1(){
    Log.i("TEST", "Hi....");
}

public static void testMethod2(){
    Log.i("TEST", "Hello....");
}
}

在另一个项目 B 中,我有 TestApp2Class 类,我使用了 first.jar 类方法,如 testMethod1();,如下所示。

public class TestApp2Class {

public static void TestApp2Method() {
    Log.i("TESTAPP", "Hi TESTAPP2....");
     TestAppMethods.testMethod1();
}

public static void TestApp2Method2() {
    Log.i("TESTAPP", "Hello TESTAPP2....");
     TestAppMethods.testMethod2();

}

}

这个项目 B 我导出为 jar 文件名 second.jar 并在另一个项目 C 中使用了这个 jar。

喜欢,

public class MainActivity extends Activity {

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

}

我遇到了异常

java.lang.NoClassDefFoundError: com.example.testapp.TestAppMethods 它无法访问 first.jar 的类。两天以来我一直被这个问题困扰。我想我几乎什么都试过了。

我尝试过的步骤:

  • 通常我们会在未按顺序检查标记并导出构建路径时收到此错误。我已经这样做了,并且还检查了依赖项上的标记。
  • 我尝试将 second.jar 放在 libs 文件夹中而不是 buildpath 中,然后尝试了,它提供了帮助。
  • 我尝试手动编辑MANIFEST.IN 文件并添加了一行Class-Path: libs/first.jar 并在将项目B 导出到second.jar 时将first.jar 保留在libs 文件夹中,即使这样也没有帮助。我认为不应手动编辑该 MANIFEST.IN 文件。

这些都是我尝试过的。请提及我做错了什么或遗漏了什么。

每次我尝试上述所有步骤时,我都会收到 NoClassDefFoundError 异常。

Logcat:

12-03 18:32:52.119: E/AndroidRuntime(29262): FATAL EXCEPTION: main
12-03 18:32:52.119: E/AndroidRuntime(29262): java.lang.NoClassDefFoundError:        com.example.testapp.TestAppMethods
12-03 18:32:52.119: E/AndroidRuntime(29262):    at com.example.testapp2.TestaApp2Class.TestApp2Method(TestaApp2Class.java:11)
12-03 18:32:52.119: E/AndroidRuntime(29262):    at com.example.jartestapp.MainActivity.onCreate(MainActivity.java:14)
12-03 18:32:52.119: E/AndroidRuntime(29262):    at android.app.Activity.performCreate(Activity.java:5133)
12-03 18:32:52.119: E/AndroidRuntime(29262):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
12-03 18:32:52.119: E/AndroidRuntime(29262):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2225)
12-03 18:32:52.119: E/AndroidRuntime(29262):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2311)
12-03 18:32:52.119: E/AndroidRuntime(29262):    at android.app.ActivityThread.access$600(ActivityThread.java:149)
12-03 18:32:52.119: E/AndroidRuntime(29262):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1293)
12-03 18:32:52.119: E/AndroidRuntime(29262):    at android.os.Handler.dispatchMessage(Handler.java:99)
12-03 18:32:52.119: E/AndroidRuntime(29262):    at android.os.Looper.loop(Looper.java:137)
12-03 18:32:52.119: E/AndroidRuntime(29262):    at android.app.ActivityThread.main(ActivityThread.java:5214)
12-03 18:32:52.119: E/AndroidRuntime(29262):    at java.lang.reflect.Method.invokeNative(Native Method)
12-03 18:32:52.119: E/AndroidRuntime(29262):    at java.lang.reflect.Method.invoke(Method.java:525)
12-03 18:32:52.119: E/AndroidRuntime(29262):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:739)
12-03 18:32:52.119: E/AndroidRuntime(29262):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:555)
12-03 18:32:52.119: E/AndroidRuntime(29262):    at dalvik.system.NativeStart.main(Native Method)

【问题讨论】:

标签: java android maven jar noclassdeffounderror


【解决方案1】:

逐步尝试:
1. 删除所有库项目然后清理。
2.转到第一个项目右键单击属性-> Android。检查是图书馆。
3. 转到第二个项目 右键单击​​属性 -> 库部分中的 Android 选择添加 -> 将第一个项目添加为库。
4.转到第二个项目右键单击属性-> Android。此外,检查是图书馆。
5. 转到第三个项目 C 右键单击​​属性 -> Android。在库部分中,选择添加 -> 将第一个和第二个添加为库。 (不要将 Proj C 作为库)
6. 现在清理一切并运行 Proj C。

【讨论】:

  • @Nav 你觉得这个答案有用吗?
  • 创建库项目不是我的要求。我必须创建一个 jar 文件 :( .
  • jar 会在你运行时自动添加到你的项目中。然后你可以访问第一个jar的类。试试看告诉我。
  • 是的,我尝试了你所有的步骤,它正在工作。但我的要求是通过 second.jar 创建一个围绕 first.jar 的包装器。但是,如果我按照您的步骤进行操作,那么它就不会创建包装器。 first.jar 存在于项目 C 的 android 依赖项中。
  • 所以你想要的只是导入 second.jar 和 first.jar 将在 sencond.jar 中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-23
  • 2010-10-06
  • 2014-01-08
  • 2010-10-27
  • 2012-03-13
  • 2013-02-18
相关资源
最近更新 更多