【问题标题】:Unable to link external libraries during Android unit testing在 Android 单元测试期间无法链接外部库
【发布时间】:2013-04-09 21:29:41
【问题描述】:

在为我的 Android 项目加载单元测试时,我看到了一些有趣的警告。正常运行应用程序时,我没有看到这些错误。它们并没有阻止我的单元测试运行,但它们令人担忧。

下面错误日志中提到的 Flurry 库位于正在测试的项目的库项目的 libs 目录中。

目录结构如下所示:

  • 应用项目
  • 图书馆项目
      • FlurryAgent.jar
  • 单元测试项目

错误如下所示:

04-09 14:03:12.337: I/dalvikvm(28914): Failed resolving Lcom/flurry/android/bg; interface 2179 'Lcom/google/ads/AdListener;'
04-09 14:03:12.337: W/dalvikvm(28914): Link of class 'Lcom/flurry/android/bg;' failed
04-09 14:03:12.347: W/ClassPathPackageInfoSource(28914): Cannot load class. Make sure it is in your apk. Class name: 'com.flurry.android.bg'. Message: com.flurry.android.bg
04-09 14:03:12.347: W/ClassPathPackageInfoSource(28914): java.lang.ClassNotFoundException: com.flurry.android.bg
04-09 14:03:12.347: W/ClassPathPackageInfoSource(28914):    at java.lang.Class.classForName(Native Method)
04-09 14:03:12.347: W/ClassPathPackageInfoSource(28914):    at java.lang.Class.forName(Class.java:217)
04-09 14:03:12.347: W/ClassPathPackageInfoSource(28914):    at android.test.ClassPathPackageInfoSource.createPackageInfo(ClassPathPackageInfoSource.java:88)
04-09 14:03:12.347: W/ClassPathPackageInfoSource(28914):    at android.test.ClassPathPackageInfoSource.access$000(ClassPathPackageInfoSource.java:39)
04-09 14:03:12.347: W/ClassPathPackageInfoSource(28914):    at android.test.ClassPathPackageInfoSource$1.load(ClassPathPackageInfoSource.java:50)
04-09 14:03:12.347: W/ClassPathPackageInfoSource(28914):    at android.test.ClassPathPackageInfoSource$1.load(ClassPathPackageInfoSource.java:47)
04-09 14:03:12.347: W/ClassPathPackageInfoSource(28914):    at android.test.SimpleCache.get(SimpleCache.java:31)
04-09 14:03:12.347: W/ClassPathPackageInfoSource(28914):    at android.test.ClassPathPackageInfoSource.getPackageInfo(ClassPathPackageInfoSource.java:72)
04-09 14:03:12.347: W/ClassPathPackageInfoSource(28914):    at android.test.ClassPathPackageInfo.getSubpackages(ClassPathPackageInfo.java:48)
04-09 14:03:12.347: W/ClassPathPackageInfoSource(28914):    at android.test.ClassPathPackageInfo.addTopLevelClassesTo(ClassPathPackageInfo.java:61)
04-09 14:03:12.347: W/ClassPathPackageInfoSource(28914):    at android.test.ClassPathPackageInfo.getTopLevelClassesRecursive(ClassPathPackageInfo.java:55)
04-09 14:03:12.347: W/ClassPathPackageInfoSource(28914):    at android.test.suitebuilder.TestGrouping.testCaseClassesInPackage(TestGrouping.java:156)
04-09 14:03:12.347: W/ClassPathPackageInfoSource(28914):    at android.test.suitebuilder.TestGrouping.addPackagesRecursive(TestGrouping.java:117)
04-09 14:03:12.347: W/ClassPathPackageInfoSource(28914):    at android.test.suitebuilder.TestSuiteBuilder.includePackages(TestSuiteBuilder.java:102)
04-09 14:03:12.347: W/ClassPathPackageInfoSource(28914):    at android.test.InstrumentationTestRunner.onCreate(InstrumentationTestRunner.java:366)
04-09 14:03:12.347: W/ClassPathPackageInfoSource(28914):    at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4239)
04-09 14:03:12.347: W/ClassPathPackageInfoSource(28914):    at android.app.ActivityThread.access$1400(ActivityThread.java:139)
04-09 14:03:12.347: W/ClassPathPackageInfoSource(28914):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1284)
04-09 14:03:12.347: W/ClassPathPackageInfoSource(28914):    at android.os.Handler.dispatchMessage(Handler.java:99)
04-09 14:03:12.347: W/ClassPathPackageInfoSource(28914):    at android.os.Looper.loop(Looper.java:137)
04-09 14:03:12.347: W/ClassPathPackageInfoSource(28914):    at android.app.ActivityThread.main(ActivityThread.java:4918)
04-09 14:03:12.347: W/ClassPathPackageInfoSource(28914):    at java.lang.reflect.Method.invokeNative(Native Method)
04-09 14:03:12.347: W/ClassPathPackageInfoSource(28914):    at java.lang.reflect.Method.invoke(Method.java:511)
04-09 14:03:12.347: W/ClassPathPackageInfoSource(28914):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1004)
04-09 14:03:12.347: W/ClassPathPackageInfoSource(28914):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:771)
04-09 14:03:12.347: W/ClassPathPackageInfoSource(28914):    at dalvik.system.NativeStart.main(Native Method)
04-09 14:03:12.347: W/ClassPathPackageInfoSource(28914): Caused by: java.lang.NoClassDefFoundError: com/flurry/android/bg
04-09 14:03:12.347: W/ClassPathPackageInfoSource(28914):    ... 26 more
04-09 14:03:12.347: W/ClassPathPackageInfoSource(28914): Caused by: java.lang.ClassNotFoundException: com.flurry.android.bg
04-09 14:03:12.347: W/ClassPathPackageInfoSource(28914):    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:61)
04-09 14:03:12.347: W/ClassPathPackageInfoSource(28914):    at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
04-09 14:03:12.347: W/ClassPathPackageInfoSource(28914):    at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
04-09 14:03:12.347: W/ClassPathPackageInfoSource(28914):    ... 26 more

我尝试确保在 Properties->Java Build Path->Order and Export 中检查了我的应用项目,但这似乎没有任何影响。

任何帮助表示赞赏!

【问题讨论】:

    标签: android unit-testing linker flurry buildpath


    【解决方案1】:

    如果您正在测试一个库项目,您应该按照这篇文章(带有屏幕截图)中描述的步骤进行操作:http://dtmilano.blogspot.ca/2012/04/android-testing-library-projects.html

    【讨论】:

    • 感谢 Diego 的回复,但我实际上并不是在测试图书馆项目。我正在测试的项目恰好使用了一个库项目,而链接器正在抱怨该库项目中的一个库。
    • 那么“单元测试项目”包含在您的示例中使用“库项目”的“应用项目”的测试?
    猜你喜欢
    • 1970-01-01
    • 2018-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-28
    • 1970-01-01
    • 1970-01-01
    • 2020-01-03
    相关资源
    最近更新 更多