4

似乎有很多关于向 android 项目和 ant 项目添加外部 jar 的问题,但我没有找到适用于这种情况的解决方案。我对 Ant 不太熟悉,这可能会激怒这个问题。

问题是:我正在尝试将 JSch 库添加到我的 uiautomator 项目中。我将 jsch.jar 文件放入 /libs 文件夹中,希望它会被“android create uitest-project”找到。但是,事实并非如此-所以看来我需要修改 build.xml/ant.properties/build.properties 或其他东西才能让 ant 找到 jar

具体错误是:

[javac] Compiling 5 source files to /Users/.../KeyEvents/bin/classes
[javac] /Users/.../KeyEvents/src/com/proj/automation/core/coreSSH.java:9: error: package com.jcraft.jsch does not exist

build.xml 是由 android 脚本创建的,Ant 是开箱即用的——所以我认为我对 ant 的清理知识是问题所在:P。

4

4 回答 4

9

嗨,我遇到了同样的问题。我按照以下步骤修复它:

  • 1 在项目目录中创建“libs”目录,将所有外部 jar 文件放在 libs 目录中。
  • 2 在项目目录中添加一个 custom_rules.xml 文件,内容如下。

https://github.com/xiaocong/android-uiautomator-jsonrpcserver/blob/master/custom_rules.xml

<!-- Include external libs -->
<property name="jar.libs.dir" value="libs" />
<property name="jar.libs.absolute.dir" location="${jar.libs.dir}" />
<path id="classpath">
    <fileset dir="${jar.libs.absolute.dir}">
        <include name="**/*.jar"/>
    </fileset>
</path>

<property name="dex.file.name" value="classes.dex" />
<property name="out.dir" value="bin" />
<property name="out.absolute.dir" location="${out.dir}" />
<property name="out.absolute.bundle.dir" location="${out.absolute.dir}/bundle" />
<property name="intermediate.dex.bundle.file" location="${out.absolute.bundle.dir}/${dex.file.name}" />

<property name="out.bundle.file" value="${out.absolute.dir}/bundle.jar" />

<target name="-pre-compile">
    <mkdir dir="${out.absolute.bundle.dir}" />
</target>

<!-- overwrite the compile target in uibuild.xml to include to external jars -->
<target name="compile" depends="-build-setup, -pre-compile">
    <javac encoding="${java.encoding}"
            source="${java.source}" target="${java.target}"
            debug="true" extdirs="" includeantruntime="false"
            destdir="${out.classes.absolute.dir}"
            bootclasspathref="project.target.class.path"
            verbose="${verbose}"
            fork="${need.javac.fork}">
        <src path="${source.absolute.dir}" />
        <classpath refid="classpath"/>
        <compilerarg line="${java.compilerargs}" />
    </javac>
</target>

<!-- empty default post-dex target. Create a similar target in
     your build.xml and it'll be called instead of this one. -->
<target name="-post-dex">
    <dex executable="${dx}"
            output="${intermediate.dex.bundle.file}"
            nolocals="@{nolocals}"
            verbose="${verbose}">
        <fileset dir="${jar.libs.absolute.dir}">
             <include name="**/*.jar"/>
        </fileset>
    </dex>
</target>

<!-- empty default post-jar target. Create a similar target in
     your build.xml and it'll be called instead of this one. -->
<target name="-post-jar">
    <jar destfile="${out.bundle.file}">
        <fileset file="${intermediate.dex.bundle.file}" />
    </jar>
</target>

<target name="install" description="Install the test package">
     <exec executable="${adb}" failonerror="true">
        <arg line="${adb.device.arg}" />
        <arg value="push" />
        <arg value="${out.file}" />
        <arg value="/data/local/tmp" />
    </exec>
     <exec executable="${adb}" failonerror="true">
        <arg line="${adb.device.arg}" />
        <arg value="push" />
        <arg value="${out.bundle.file}" />
        <arg value="/data/local/tmp" />
    </exec>
</target>

  • 3 选择“build.xml”作为“Ant Build”运行每个都可以。

  • 4 会生成两个jar文件,额外的jar文件命名为“bundle.jar”

  • 5 将 bundle.jar 推送到 /data/local/tmp/

  • 6 adb shell uiautomator xxxTestCast.jar bunder.jar -c com.xxx.MainClass

有用!

于 2014-02-21T09:22:32.540 回答
2

看看这里 [1]。只需复制此文件并将所需的 jar 放入目录 libs 中,然后运行 ​​ant build、ant install 和最后::

adb shell uiautomator runtest YourTest.jar bundle.jar -c your.test

[1] - https://github.com/xiaocong/android-uiautomator-jsonrpcserver/blob/master/custom_rules.xml

于 2013-10-21T16:59:45.557 回答
2

在项目中创建 lib 目录,将所有需要的 jar 保存在那里,然后创建新的 custom_rule.xml 并复制下面编写的代码,然后它将工作文件或者您也可以将此代码粘贴到 build.xml 的最后。

<property name="jar.libs.dir" value="libs" />
<property name="jar.libs.absolute.dir" location="${jar.libs.dir}" />
<path id="classpath">
    <fileset dir="${jar.libs.absolute.dir}">
        <include name="your-helping-version.jar" />
        <include name="gson-2.2.2.jar" />
    </fileset>
</path>

<!-- version-tag: VERSION_TAG -->
<import file="${sdk.dir}/tools/ant/uibuild.xml" />


<!-- overwrite the compile target in uibuild.xml to include to external 
    jars -->
<target name="compile" depends="-build-setup, -pre-compile">
    <javac encoding="${java.encoding}" source="${java.source}"
        target="${java.target}" debug="true" extdirs="" includeantruntime="false"
        destdir="${out.classes.absolute.dir}" bootclasspathref="project.target.class.path"
        verbose="${verbose}" fork="${need.javac.fork}">
        <src path="${source.absolute.dir}" />
        <classpath refid="classpath" />
        <compilerarg line="${java.compilerargs}" />
    </javac>
</target>

<!-- overwrite the -dex target in uibuild.xml to include external jar files 
    into the target dex file. -->
<target name="-dex" depends="compile, -post-compile">
    <dex executable="${dx}" output="${intermediate.dex.file}"
        nolocals="@{nolocals}" verbose="${verbose}">
        <fileset dir="${jar.libs.absolute.dir}">
            <include name="your-helping-version.jar" />
            <include name="gson-2.2.2.jar" /> 
        </fileset>
        <path path="${out.classes.absolute.dir}" />
    </dex>
</target>
于 2013-12-06T08:39:28.033 回答
0

如果您使用的是日食

在 Project Explorer 中,右键单击您创建的新项目,然后选择 Properties > Java Build Path,然后执行以下操作:单击 Add External JARs... 并导航到目录并添加 jar 文件

于 2013-10-14T04:39:03.563 回答