uiautomator开发使用到第三方jar,出现class not found或者 BUILD FAILED的问题
来源:互联网 发布:软件开发人员招聘 编辑:程序博客网 时间:2024/09/21 06:09
最近做安卓的遍历测试,是基于uiautomator做的,二次开发,避免不了使用第三方jar,比如这边我使用到的就是xStream,但是在打包的过程中会出现
classNotFound或者是Build Failed的问题。
这里有两个原因:
1、编译的时候,没有把jar包添加进来,这时候的体现一般是报BUILD FAILED的错误。
2、jar包添加进来了,没有把jar下的class文件的路径对应放到classes.dex文件中,造成类无法找到,这时候一般会报classNotFound的错误。
针对以上两个问题,我们需要对应修改uiBuild.xml文件,这个文件是ant自带的,目录为${sdk.dir}/tools/ant/uibuild.xml
1、将jar包的路径,放到compile下,红色部分为新增内容,意思是将项目的libs文件夹下的所有jar包都加入编译。
<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}" />
<compilerarg line="${java.compilerargs}" />
<classpath>
<fileset dir="${jar.libs.dir}" includes="*.jar"/>
</classpath>
</javac>
</target>
2、把class的路径加入到classes.dex文件中,红色部分为新增内容。
<target name="-dex" depends="compile, -post-compile">
<dex executable="${dx}"
output="${intermediate.dex.file}"
nolocals="@{nolocals}"
verbose="${verbose}">
<fileset dir="${jar.libs.dir}" includes="*.jar"/>
<path path="${out.classes.absolute.dir}"/>
</dex>
</target>
最后修改后的uibuild.xml文件内容如下:
<?xml version="1.0" encoding="UTF-8"?><project name="android_rules" default="debug"><!-- This build file is imported by the project build file. It contains all the targets and tasks necessary to build Android projects, be they regular projects, library projects, or test projects. At the beginning of the file is a list of properties that can be overridden by adding them to your ant.properties (properties are immutable, so their first definition sticks and is never changed). Follows: - custom task definitions, - more properties (do not override those unless the whole build system is modified). - macros used throughout the build, - base build targets, - debug-specific build targets, - release-specific build targets, - instrument-specific build targets, - test project-specific build targets, - install targets, - help target --><!-- ******************************************************* --><!-- **************** Overridable Properties *************** --><!-- ******************************************************* --><!-- You can override these values in your build.xml or ant.properties. Overriding any other properties may result in broken build. --><!-- Tells adb which device to target. You can change this from the command line by invoking "ant -Dadb.device.arg=-d" for device "ant -Dadb.device.arg=-e" for the emulator. --><property name="adb.device.arg" value="" /><!-- filename only of the output file. Cannot be a path --><property name="out.filename" value="${ant.project.name}.jar" /><!-- compilation options --><property name="java.encoding" value="UTF-8" /><property name="java.target" value="1.5" /><property name="java.source" value="1.5" /><property name="java.compilerargs" value="" /><!-- Verbosity --><property name="verbose" value="false" /><!-- ******************************************************* --><!-- ********************* Custom Tasks ******************** --><!-- ******************************************************* --><!-- jar file from where the tasks are loaded --><path id="android.antlibs"><pathelement path="${sdk.dir}/tools/lib/ant-tasks.jar" /></path><!-- Custom tasks --><taskdef resource="anttasks.properties" classpathref="android.antlibs" /><!-- Emma configuration --><property name="emma.dir" value="${sdk.dir}/tools/lib" /><path id="emma.lib"><pathelement location="${emma.dir}/emma.jar" /><pathelement location="${emma.dir}/emma_ant.jar" /></path><taskdef resource="emma_ant.properties" classpathref="emma.lib" /><!-- End of emma configuration --><!-- ******************************************************* --><!-- ******************* Other Properties ****************** --><!-- ******************************************************* --><!-- overriding these properties may break the build unless the whole file is updated --><!-- Input directories --><property name="source.dir" value="src" /><property name="source.absolute.dir" location="${source.dir}" /><property name="jar.libs.dir" value="libs" /><property name="jar.libs.absolute.dir" location="${jar.libs.dir}" /><!-- Output directories --><property name="out.dir" value="bin" /><property name="out.absolute.dir" location="${out.dir}" /><property name="out.classes.absolute.dir" location="${out.dir}/classes" /><property name="out.file" value="${out.absolute.dir}/${out.filename}" /><!-- tools location --><property name="android.tools.dir" location="${sdk.dir}/tools" /><property name="android.platform.tools.dir" location="${sdk.dir}/platform-tools" /><condition property="exe" value=".exe" else=""><os family="windows" /></condition><condition property="bat" value=".bat" else=""><os family="windows" /></condition><property name="adb" location="${android.platform.tools.dir}/adb${exe}" /><!-- Intermediate files --><property name="dex.file.name" value="classes.dex" /><property name="intermediate.dex.file" location="${out.absolute.dir}/${dex.file.name}" /><property name="resource.package.file.name" value="${ant.project.name}.ap_" /><!-- whether we need to fork javac. This is only needed on Windows when running Java < 7 --><condition else="false" property="need.javac.fork"><and><matches pattern="1\.[56]" string="${java.specification.version}" /><not><os family="unix" /></not></and></condition><macrodef name="run-tests-helper"><attribute name="emma.enabled" default="false" /><element name="extra-instrument-args" optional="yes" /><sequential><echo level="info">Running tests ...</echo><exec executable="${adb}" failonerror="true"><arg line="${adb.device.arg}" /><arg value="shell" /><arg value="am" /><arg value="instrument" /><arg value="-w" /><arg value="-e" /><arg value="coverage" /><arg value="@{emma.enabled}" /><extra-instrument-args /><arg value="${project.app.package}/${test.runner}" /></exec></sequential></macrodef><!-- ******************************************************* --><!-- ******************** Build Targets ******************** --><!-- ******************************************************* --><!-- Basic Ant + SDK check --><target name="-check-env"><checkenv /></target><!-- empty default pre-clean target. Create a similar target in your build.xml and it'll be called instead of this one. --><target name="-pre-clean" /><!-- clean target --><target name="clean" depends="-check-env, -pre-clean"description="Removes output files created by other targets."><delete dir="${out.absolute.dir}" verbose="${verbose}" /></target><!-- Pre build setup --><target name="-build-setup" depends="-check-env"><getbuildtools name="android.build.tools.dir" /><property name="dx" location="${android.build.tools.dir}/dx${bat}" /><echo level="info">Resolving Build Target for ${ant.project.name}...</echo><!-- load project properties, resolve Android target, library dependencies and set some properties with the results. All property names are passed as parameters ending in -Out --><getuitarget compileClassPathOut="project.target.class.path" /><echo level="info">----------</echo><echo level="info">Creating output directories if needed...</echo><mkdir dir="${out.absolute.dir}" /><mkdir dir="${out.classes.absolute.dir}" /></target><!-- empty default pre-compile target. Create a similar target in your build.xml and it'll be called instead of this one. --><target name="-pre-compile" /><!-- Compiles this project's .java files into .class files. --><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}" /><compilerarg line="${java.compilerargs}" /><!-- 修改位置1 --><classpath><fileset dir="${jar.libs.dir}" includes="*.jar" /></classpath><!-- 修改位置1 --></javac></target><!-- empty default post-compile target. Create a similar target in your build.xml and it'll be called instead of this one. --><target name="-post-compile" /><!-- Converts this project's .class files into .dex files --><target name="-dex" depends="compile, -post-compile"><dex executable="${dx}" output="${intermediate.dex.file}"nolocals="@{nolocals}" verbose="${verbose}"><!-- 修改位置2 --><fileset dir="${jar.libs.dir}" includes="*.jar" /><!-- 修改位置2 --><path path="${out.classes.absolute.dir}" /></dex></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" /><target name="-jar" depends="-dex, -post-dex"><jar destfile="${out.file}"><fileset file="${intermediate.dex.file}" /></jar></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" /><target name="build" depends="-jar, -post-jar" /><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></target><target name="test" description="Runs tests"><!-- todo: fix this --><fail message="Launching tests from Ant not supported yet" /><exec executable="${adb}" failonerror="true"><arg line="${adb.device.arg}" /><arg value="shell" /><arg value="uiautomator" /><arg value="runtest" /><arg value="${out.filename}" /><arg value="-e" /><arg value="class" /><arg value="com.android.uiautomator.samples.skeleton.DemoTestCase" /></exec></target><target name="help"><!-- displays starts at col 13 |13 80| --><echo>Android Ant Build. Available targets:</echo><echo> help: Displays this help.</echo><echo> clean: Removes output files created by other targets.</echo><echo> build: Builds the test library.</echo><echo> install: Installs the library on a connected device or</echo><echo> emulator.</echo><echo> test: Runs the tests.</echo><echo></echo><echo>It is possible to mix targets. For instance:</echo><echo> ant build install test</echo><echo>This will build, install and run the test in a single command.</echo></target></project>
- uiautomator开发使用到第三方jar,出现class not found或者 BUILD FAILED的问题
- 添加第三方jar包,class not found的解决
- android uiautomator使用第三方jar
- 导入第三方框架ReactiveCocoa经常出现的问题 如出现Could not build module ‘ReactiveCocoa’
- 导入第三方jar包No Class Def Found Error
- 使用第三方动态库出现dyld: Library not loaded Reason: image not found
- Android Studio 在导入第三方包之后出现的gradle DSL method not found 问题原因及解决方案
- 使用Hibernate过程中出现entity class not found 问题的解决思路
- 使用Hibernate过程中出现entity class not found 问题的解决思路
- maven debug时,第三方jar包 source not found
- UIAutomator如何添加第三方jar包
- 在可执行jar 包中动态载入第三方jar class的有关问题
- 在可执行jar 包中动态载入第三方jar class的有关问题
- 在可执行jar 包中动态载入第三方jar class的有关问题
- 在可执行jar 包中动态载入第三方jar class的有关问题
- 在可执行jar 包中动态载入第三方jar class的有关问题
- 在可执行jar 包中动态载入第三方jar class的有关问题
- 在可执行jar 包中动态载入第三方jar class的有关问题
- 机器学习基石HOW BETTER部分(2)
- 常用的正则表达式
- 测试系统组成
- 一种复合的自动检测语言或编码的方法
- java设计模式(九)--建造者模式
- uiautomator开发使用到第三方jar,出现class not found或者 BUILD FAILED的问题
- 树状数组(Binary Indexed Tree)
- Lua coroutine理解
- 跨平台正则表达式POSIX regex的使用
- opencv检测运动物体的基础_特征提取
- matlab里面向信号里加入白噪声
- ios学习备份记录
- Android 中LayoutInflater的使用!
- Android App快速开发框架