2

外部jarを含むAndroidプロジェクトをテストするAndroidテストプロジェクトのAndroidコードカバレッジを生成しようとしています。コマンドを実行すると

ant emma install debug test

Androidプロジェクトのみのカバレッジを示していますが、含まれている外部jarのパッケージと機能は含まれていません。私の調査によると、いくつかの変更はant.propertiesfile とemma report tagで行う必要があることがわかりましたbuild.xml

どんな提案でも大歓迎です。

[編集]

さらなる研究で、変数を入力するというブログを調べました

tested.android.library.source.dir="path to external jars" in ant.properties

同じ変数をレポートのソースパスに追加する必要があります

<emma>
                    <report sourcepath="${tested.project.source.absolute.dir}:${tested.project.lib.source.path.value}:${tested.android.library.source.dir}" verbosity="${verbosity}">
                        <!-- TODO: report.dir or something like should be introduced if necessary -->
                        <infileset file="${out.absolute.dir}/coverage.ec" />
                        <infileset file="${tested.project.out.absolute.dir}/coverage.em" />
                        <!-- TODO: reports in other, indicated by user formats -->
                        <html outfile="${out.absolute.dir}/coverage.html" />
                   </report>
  </emma>

しかし、まだカバレッジにはExternal jarの関数とパッケージが表示されていません。

私のjarファイルがAndroidテストプロジェクトではなく、テストされているAndroidプロジェクトにあることを知りたかったのです。ant.propertiesしたがって、テスト プロジェクトでこれらの外部 jar へのパスを指定する方法は次のとおりです。

4

3 に答える 3

2

多くの検索と試行を経て、最終的にメインプロジェクトで外部jarのパッケージを取得しました。ant.propertiesとbuild.xmlにtested.android.library.source.dirと入力しました

ant.properties:tested.android.library.source.dir ="jarが存在するメインプロジェクトのlibsフォルダーへのパス"Build.xml:レポートタグのemmaタグの下に、コロンで区切られたこの変数を追加します。

コマンドプロンプトに移動して実行します

メインプロジェクト:android updateproject-p。テストプロジェクトの場合:android update test-project-m"メインプロジェクトのパス"-p。

次に、build.xml(sdk / tools / ant / build.xml)からテストターゲットをコピーし、テストプロジェクトのbuild.xmlの行の上に貼り付けます。

 <import file="${sdk.dir}/tools/ant/build.xml" />

バージョンタグをに変更することを忘れないでください

ここでもう一度コマンドプロンプトを開き、次のコマンドを実行します。

メインプロジェクトの場合:ant emma debug installテストプロジェクトの場合:ant emma debug install test

生成されたコードカバレッジレポートには、外部jarのパッケージが含まれます

于 2012-12-05T10:51:48.967 に答える
2

私もかなり前から同じことに取り組んでいます。ライブラリ プロジェクトのコード カバレッジ レポートを参照する

外部 jar カバレッジのサポートは ADT-r20 にあります。私は自分が働いている方向を示すことしかできません。ant 内で build.xml の変更に取り組んでいます:

 <!-- This is macro that enable passing variable list of external jar files to ApkBuilder
     Example of use:
     <package-helper>
         <extra-jars>
            <jarfolder path="my_jars" />
            <jarfile path="foo/bar.jar" />
            <jarfolder path="your_jars" />
         </extra-jars>
     </package-helper> -->
<macrodef name="package-helper">
    <element name="extra-jars" optional="yes" />
    <sequential>
        <apkbuilder
                outfolder="${out.absolute.dir}"
                resourcefile="${resource.package.file.name}"
                apkfilepath="${out.packaged.file}"
                debugpackaging="${build.is.packaging.debug}"
                debugsigning="${build.is.signing.debug}"
                verbose="${verbose}"
                hascode="${manifest.hasCode}"
                previousBuildType="${build.last.is.packaging.debug}/${build.last.is.signing.debug}"
                buildType="${build.is.packaging.debug}/${build.is.signing.debug}">
            <dex path="${intermediate.dex.file}"/>
            <sourcefolder path="${source.absolute.dir}"/>
            <jarfile refid="project.all.jars.path" />
            <nativefolder path="${native.libs.absolute.dir}" />
            <nativefolder refid="project.library.native.folder.path" />
            <extra-jars/>
        </apkbuilder>
    </sequential>
</macrodef>

私はまだ運がありません。

于 2012-11-20T10:03:24.690 に答える
0

私はこれに2日間苦労し、最終的にそれを理解しました。最初の投稿のコード スニペットは、emma メタデータ ファイルとランタイム カバレッジ ファイルから計測レポートを生成するだけで、jar で計測を実行しません。コードをインストルメント化するには、android ant build.xml ターゲットのように、バイト コードを操作する必要があります。<-compile> にネストされた要素を見ると、クラス ファイルのみをインストルメント化しているようなコメントが表示されます。jar を計測するには、classpath のような要素をクラスへのパスとともに jar に追加します。

エマのドキュメント: http://emma.sourceforge.net/reference/ch02s03s02.html

<emma enabled="${emma.enabled}" >
  <instr mode="fullcopy"
         outdir="${out.instr.dir}"
         merge="no"
         filter="${emma.filter}">
    <instrpath>
      <fileset dir="${out.dir}" includes="**/*.jar" />
    </instrpath>
  </instr>
</emma>

Android の build.xml 内。instrpath 属性を削除して、上記の例のようにするだけです。

 756                     <emma enabled="true">
 757                         <instr verbosity="${verbosity}"
 758                                mode="overwrite"
 759                                instrpath="${out.absolute.dir}/classes"
 760                                outdir="${out.absolute.dir}/classes"
 761                                metadatafile="${emma.coverage.absolute.file}">
 762                             <filter excludes="${emma.default.filter}" />
 763                             <filter value="${emma.filter}" />
 764                         </instr>
 765                     </emma>

このようなもの:(行番号を許してください)

 756                     <emma enabled="true">
 757                         <instr verbosity="${verbosity}"
 758                                mode="overwrite"
 760                                outdir="${out.absolute.dir}/classes"
 761                                metadatafile="${emma.coverage.absolute.file}">
 759                                <instrpath>
 759                                     <pathelement path="${out.absolute.dir}/classes"/>
 759                                     <fileset dir="${you-class-path}"/>
 759                                          <include name="**/*.jar"/>
 759                                     </fileset>
 759                                </instrpath>
 762                             <filter excludes="${emma.default.filter}" />
 763                             <filter value="${emma.filter}" />
 764                         </instr>
 765                     </emma>
于 2014-01-24T06:27:01.707 に答える