2

我正在构建一个 Android 应用程序,我想使用另一个 Eclipse 项目中的一个包中的一个类(一个普通的 Java,非 Android 项目,如果这很重要的话)。我右键单击Android项目,选择属性| Java 构建路径 | 项目并检查我想要的课程。然后,我添加了一个 Eclipse 似乎接受的 import 语句(即,指示它无法识别该类的错误图标消失了)。这是主要活动的代码:

package com.MeadowEast.tmptest;

import learn.Card; // the class I want
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.widget.TextView;

public class MainActivity extends Activity {

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        TextView t  = (TextView) findViewById(R.id.textView2);
        Card c = new Card("abc","def","ghi"); // using the class
        t.setText(c.getHanzi());
    }
}

对非 Android Java 项目使用完全相同的方法可以正常工作。但是当我尝试在模拟器中运行上述内容时,它会死掉并且错误是Could not find class 'learn.Card'.

我曾经在使用 JAR 文件时遇到过类似的问题,并且了解到有两个必要的步骤(第二个是将 JAR 的副本放在 libs 文件夹中)。这里也需要第二步吗?还是有别的问题?

4

3 回答 3

0

有很多方法可以管理这个。

  1. 编译并在 libs 目录中包含一个 jar
  2. 编译并包含使用某种依赖管理(a la Maven)。
  3. Eclipse 允许库依赖于项目工作区中的其他(未编译的)库
  4. Android Studio 允许一个模块依赖另一个(未编译的)模块

注意:选项 3 和 4 与选项 2 的轻量级版本非常相似。

另请注意,对于一个小型项目,2 可能会过大,可能会引入不需要的额外编译时间。

就个人而言,对于库不经常更改的项目,我更喜欢选项 1,而对于库所依赖的项目经常更改的项目,我更喜欢选项 3/4。

1 的好处是当库更改时您不会感到惊讶(api 的更改, - 您必须有意识地努力更新到最新版本)。3/4 的好处是,如果您要更新库以使用项目,则不必不断地重新编译和导入 jar。

于 2014-07-22T01:19:33.530 回答
0

对此有不同的答案,具体取决于您使用的 IDE。

如果您使用的是 Eclipse/ADT,您应该能够简单地将 jar 放入名为“libs”的顶级目录中。确保名称完全正确。

即使在您这样做之后,Eclipse 也可能需要“抖动”才能让它注意到新文件。除非您看到包含您的库的“Android Private Libraries”条目,否则它不会注意到。尝试重新构建、重新导入、刷新等。费。

如果您使用的是 Intellij/Studio(以及 Gradle),则需要在 Gradle 构建文件中添加一行,如下所示:

compile fileTree(dir: 'libs', include: ['*.jar'])

它位于文件夹dependencies中文件的子句中。build.gradleapp

这次jar文件本身进入目录app/libs

在你做那个“摇晃”工作室之后。“同步”、“清除缓存并重新启动”。所有惯用的伎俩。当您的库出现在“项目”窗格中的“外部库”选项卡下时,您就知道您已经成功了

于 2014-07-22T02:20:04.353 回答
-1

如果您使用源代码,请将它们放在您的项目中。

如果你使用 jar,你应该放入 libs 文件夹。因为,当您在设备中运行应用程序时,所有

您的代码必须在您的 apk 中(framework.jar 除外),否则找不到您的代码。如果你

将你的 jar 放在 libs 文件夹中,eclipse(确切地说是 apkbuilder)会将它们打包成 apk

文件。

于 2012-11-06T02:53:39.463 回答