几天来我一直在努力解决一个问题,我不知道如何解决这个问题。我正在使用由 android sdk 提供的 Android 工具编译的 Android 库项目。在项目内部,我遵循一个 android 项目的标准结构(我的 jar 文件位于项目的 libs 目录中:
我发现当我使用 Ant 编译项目时:
<target name="compile-payment-lib" depends="prepare,init-profile">
<delete file="../payment-lib/project.properties"/>
<exec executable="${android.tool}" dir="../payment-lib" failonerror="true">
<arg value="update"/>
<arg value="lib-project"/>
<arg value="-p"/>
<arg value="${basedir}/../payment-lib"/>
<arg value="-t"/>
<arg value="${android.target.version}"/>
</exec>
<echo file="../payment-lib/project.properties" message="android.library=true" append="true"/>
<ant dir="../payment-lib" target="release"/>
</target>
它不包括 jar 文件,因此当我们尝试收集这些类并使用它们时,它会在运行时丢失引用。我正在使用最新版本的 android 工具 rev20 进行编译。
我试图解决这些参考的一些事情:
- 解压 Jar 文件并将文件放入 bin 目录,然后将这些文件添加到我们的主 jar 文件中
- 尝试将 jar 编译到 classes.dex 中(不知道如何在构建时使用此文件)
- 尝试修改项目的类路径以包含库的 jar 文件
如果有人知道我可能做错了什么,请告诉我。
我应该提到的一件事是,这是一个特定项目与另一个项目一起使用,即实际应用程序项目。这个项目特别是一个带有 jar 依赖项的库项目。
另一件事是这是一个 Adobe Air 应用程序,在 android 中有一些本机扩展。因此,为了完成我们的任务,我们创建了一个带有主 jar 文件的 ANE,其中包含我们使用这样的 ant 任务的所有引用:
<target name="master-jar" depends="prepare">
<delete dir="target/uber-jar" />
<mkdir dir="target/uber-jar"/>
<antcall target="expand-3rdparty-jars" />
<jar destfile="${basedir}/target/master.jar">
<fileset dir="../game/gamelobby/bin/classes" includes="**/*"/>
<fileset dir="../payment-lib/bin/classes" includes="**/*" excludes="**/R*.class" />
<fileset dir="../crosscell_ad_lib/bin/classes" includes="**/*" excludes="**/R*.class" />
<fileset dir="src" includes="config/**/*"/>
<fileset dir="${basedir}/target/uber-jar" includes="**/*"/>
</jar>
</target>