Включая Google AdMob SDK для использования с Ant

#android #ant #jar #admob

#Android #ant #jar #admob

Вопрос:

Я использую (новый?) AdMob SDK с использованием инструкций на этом сайте Google. Предполагается, что мы интегрируем GoogleAdMobAdsSdk-4.0.4.jar файл в наш проект. Проблема в том, как нам это сделать с помощью Ant? I отлично работает в Eclipse (он автоматически переходит в .classpath файл), но с Ant он выдает множество проблем «не удается найти» при ant release редактировании.

Где и как мне включить ссылку на этот jar? Я подозреваю, что мне следует сделать это в build.xml , но я не уверен, как.

Я копирую исходную папку в другое место, чтобы она не мешала папке моего проекта eclipse.

// отредактировано:

Позвольте мне быть более конкретным: это работает автоматически, если я просто помещаю jar в libs папку, но я хотел знать, могу ли я использовать jar, если jar находится где-то еще. В любом случае, моя проблема решена… Я могу скомпилировать его, поместив в библиотеки. Я приму это как вопрос любопытства. Никакой спешки.

Вот файл .classpath, приведенный ниже. Позвольте мне сказать, что это имеет значение только в Eclipse, но Ant, похоже, его не использует:

 <?xml version="1.0" encoding="UTF-8"?>
<classpath>
    <classpathentry kind="src" path="src"/>
    <classpathentry kind="src" path="gen"/>
    <classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
    <classpathentry kind="src" path="/android_licensing"/>
    <classpathentry kind="lib" path="C:/Users/David/Documents/program/eclipse/GoogleAdMobAdsSdk-4.0.4.jar"/>
    <classpathentry kind="output" path="bin"/>
</classpath>
  

Ошибка Ant:

 compile:
    [javac] C:android-sdk-windowstoolsantmain_rules.xml:384: warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds
    [javac] Compiling 35 source files to C:UsersDavidDocumentsprogrameclipseMyApp9-branchaaabinclasses
    [javac] C:UsersDavidDocumentsprogrameclipseMyApp9-branchv9srcnetmyappuiMainActivity.java:116: package com.google.ads does not exist
    [javac] import com.google.ads.*;
    [javac] ^
    [javac] C:UsersDavidDocumentsprogrameclipseMyApp9-branchv9srcnetmyappuiMainActivity.java:143: cannot find symbol
    [javac] symbol  : class AdView
    [javac] location: class net.myapp.ui.MainActivity
    [javac]     AdView adView;
    [javac]     ^
  

Я попытался заглянуть в main_rules, и я вижу, где он объявляет папку libs местом для jars, но все же мне интересно, есть ли простой способ настроить это для каждой строки кода проекта.

Спасибо.

Комментарии:

1. Можете ли вы отредактировать ошибки .classpath и ant в вопросе? Это только релизные сборки, или это тоже попадает в цель отладки?

2. Спасибо за ответ. Я включил соответствующие детали. В любом случае, позвольте мне повторить, что я решил эту проблему, поместив ее в библиотеки, так что пока я могу с этим смириться. Но, как я уже сказал, я хотел использовать только один jar для различных проектов (не нужно помещать по одному в каждую папку project libs).

Ответ №1:

К сожалению, это нелегко сделать из-за способа обработки jar в main_rules.xml:

 <!-- Directory for the third party java libraries -->
<property name="jar.libs.dir" value="libs" />
<property name="jar.libs.absolute.dir" location="${jar.libs.dir}" />
<!-- create a path with all the jar files, from the main project and the
     libraries -->
<path id="jar.libs.ref">
    <fileset dir="${jar.libs.absolute.dir}" includes="*.jar" />
    <path refid="project.libraries.jars" />
</path>
  

Он просматривает один каталог и создает путь ко всем файлам, находящимся там. Учитывая, что admob jar имеет встроенный номер версии, я бы посоветовал вам сохранить копию в каталоге project libs.

Если вы используете SVN, вы могли бы использовать определение externals для извлечения jar в подкаталог и с помощью задачи копирования при предварительной компиляции переместить последнюю версию в библиотеки; все зависит от того, скольким людям (или машинам) вы предоставляете общий доступ к коду

Я не могу придумать элегантный способ, который требует меньше обслуживания, чем простое копирование jar.

Комментарии:

1. Спасибо за разъяснение. У меня тоже была такая идея. С наилучшими пожеланиями.

2. Я искал элегантное решение и нашел то же самое, что и то, что я уже делаю: (