четверг, 7 апреля 2011 г.

Включение jar-библиотек в Andriod-приложение

Недавно столкнулся с неожиданной проблемой. Оказывается, подключить обычную jar-библиотеку к проекту android-приложения Netbeans позволяет, а вот включить её в скомпилированный .apk не так-то просто. Приложение собирается нормально, но в рантайме при первом обращении к библиотечным классам вываливается с ClassNotFoundException. Стандартными средствами NetBeans победить эту проблему не получилось, пришлось допиливать build.xml. Переопределяем в нём target-ы:
    <target name="-pre-jar">
        <copy todir="${build.classes.dir}">
            <fileset dir="${ext.lib.dir}">
                <include name="*.jar"/>
            </fileset>
        </copy>
    </target>

    <target name="-post-jar">
        <zip update="true" destfile="${dist.apk}">
            <zipfileset dir="${ext.lib.dir}" includes="*.so" prefix="lib/armeabi"/>
        </zip>
        <zip destfile="tmp.apk">
            <zipfileset src="${dist.apk}">
                <exclude name="META-INF/*.*" />
            </zipfileset>
        </zip>
        <move file="tmp.apk" tofile="${dist.apk}" />
        <signjar jar="${dist.apk}" alias="имя вашего ключа" storepass="пароль на хранилище" keypass="пароль на ключ" keystore="путь к хранилищу ключей.jks"/>
    </target>

В файле nbproject/project.properties объявляем свойство ext.lib.dir, в котором прописываем относительный путь к каталогу, где лежат jar-ники библиотек.
С помощью этих нехитрых манипуляций мы заставим ant при сборке проекта включить в него библиотеки и подписать полученный .apk нашим сертификатом.

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

Отправить комментарий