为什么Android不能在构建路径上的项目中找到类?

时间:2012-11-06 01:52:09

标签: android eclipse package project

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

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文件夹中)。这里还需要第二步吗?或者其他事情是什么?

3 个答案:

答案 0 :(得分:0)

有很多方法可以解决这个问题。

  1. 在libs目录中编译并包含jar
  2. 编译并包含使用某种依赖关系管理(la Maven)。
  3. Eclipse允许库依赖于项目工作区中的其他(未编译的)库
  4. Android Studio允许模块依赖于另一个(未编译的)模块
  5. 注意:选项3和4与选项2的轻量级版本非常相似。

    另请注意,对于一个小项目,2可能是过度杀伤,可能会引入不必要的额外编译时间。

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

    1的好处是当图书馆发生变化时你不会感到惊讶(api的变化, - 你必须努力更新到最新版本)。 3/4的好处是,如果您要更新库以使用该项目,您不必经常重新编译和导入jar。

答案 1 :(得分:0)

根据您使用的IDE,有不同的答案。

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

即使你这样做,Eclipse也可能需要“摇摇晃晃”才能让它注意到新文件。除非您看到包含您的库的“Android私有库”条目,否则它没有注意到。尝试重新构建,重新导入,刷新等等。 FEH。

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

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

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

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

在你那样“摇摆”工作室之后。 “同步”,“清除缓存并重新启动”。所有常用的技巧。当您的库出现在“项目”窗格中的“外部库”选项卡下时,您知道您已成功

答案 2 :(得分:-1)

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

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

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

把你的jar放在libs文件夹中,eclipse(恰好是apkbuilder)将它们打包成apk

文件。