【问题标题】:Library project's dependency not built into APK库项目的依赖项未内置在 APK 中
【发布时间】:2013-08-08 16:58:34
【问题描述】:

我的项目结构如下:

MyApp (an Android Application Project)
-- includes MyLibrary

MyLibrary (an Android Library Project)
--libs
----- core.jar*

问题是core.jar 没有内置到MyApp 的最终APK 中,所以我得到NoClassDefFoundErrors,我的应用程序崩溃了。 core.jar 设置为在MyLibrary 中导出,并显示在MyApp 的Android Private Libraries 部分,但不包含在APK 中。 我正在使用最新的 Eclipse Kepler 和最新的 ADT。 我究竟做错了什么?

【问题讨论】:

  • 否,但Android Private Libraries 在我的项目中的该选项卡上被选中。
  • 我阅读了所有答案,但没有一个有帮助。我更新到 Build Tools 18,检查并重新检查了 Android Private Libraries 导出,清理了每个项目。 :(
  • 我想知道这里是否还有另一个问题,因为 JAR 包装到了最终 APK 中的 classes.dex 中。您不会在 APK 中看到 JAR 本身。您可以尝试提取 classes.dex 文件以确保正确的类在那里和正确的位置。 (或者至少在我的图书馆项目中是这样的)
  • 我用 Virtous Ten Studio 反编译了整个 APK,但我没有看到那里的类...所有其他引用的类都在那里,但 core.jar 中的那些不在。

标签: android eclipse android-library


【解决方案1】:

您项目的“Java Build Path”属性选项下的“Order and Export”选项卡上是否选中了“MyLibrary”?

我相信也许只有它。

【讨论】:

  • 嗯,MyLibrary 不会显示在该选项卡上。只有srcgenAndroid DependenciesAndroid Private Libraries
【解决方案2】:

我终于找到了错误。这是core.jar 的问题。我用 ant 脚本构建了它,似乎脚本很糟糕。 This 是错误的脚本。 this 是很好的脚本。我想知道哪个偏好是错误的。 所以这根本不是 Android builder 的问题。


错误的脚本:

<?xml version="1.0" encoding="utf-8" ?>
<project name="project" default="jar" basedir=".">

    <target name="compile" description="Compile source">
        <mkdir dir="bin" />
        <javac srcdir="src" includes="**" destdir="bin"/>
        <copy todir="bin">
            <fileset dir="src" />
        </copy>
    </target>

    <target name="jar" description="Package into JAR" depends="compile">
        <jar destfile="project.jar" basedir="bin" compress="true" />
    </target>
</project>

好剧本:

<project name="core" basedir="." default="dist" >

    <property name="dist.dir" value="dist" />
    <property name="src.dir" value="src" />
    <property name="build.dir" value="bin" />

    <target name="dist" depends="clean, package" />
    <target name="clean" >
        <delete dir="${build.dir}" />
    </target>
    <target name="init" >
        <mkdir dir="${build.dir}" />
    </target>
    <target name="compile" >
        <javac debug="off" destdir="${build.dir}" source="1.6" srcdir="${src.dir}" target="1.6" />
    </target>
    <target name="package" depends="init, compile" >
        <jar basedir="${build.dir}" destfile="${dist.dir}/core.jar" />
    </target>

</project>

【讨论】:

    猜你喜欢
    • 2013-01-25
    • 2017-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多