#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. Я искал элегантное решение и нашел то же самое, что и то, что я уже делаю: (