Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flash Приложения: AIR, Zinc и тд. (http://www.flasher.ru/forum/forumdisplay.php?f=94)
-   -   Собираем ane с несколькими библиотеками jar (http://www.flasher.ru/forum/showthread.php?t=212598)

Nnget 22.03.2016 11:06

Собираем ane с несколькими библиотеками jar
 
Имеем следующие:
В eclipse подготовленная библиотека для сборки ane ссылается на другие библиотеки. Экспортирую не забыв проставить галочки resources to export. Итоговый файл ~ 10 Mb...
Собираем ane размер ~12 mb.
Собираем тестовое приложение, размер 134 kb.
Чувство, что где-то обман не покидает....Запускаем, код нормально выполняется до первой попытки создать экземпляр класса из дополнительных экспортированных библиотек, а потом ошибка.

Что я делаю не так, и как быть в подобной ситуации?

undefined 22.03.2016 12:33

Цитата:

Собираем тестовое приложение, размер 134 kb.
Если собираешь в ФД, попробуй инклюдить библиотеку с галочкой included library (include completely).

caseyryan 22.03.2016 12:35

В FD другая фишка. Там надо в батнике указать путь exdir к внешней библиотеке, иначе не вкомпилится

Nnget 22.03.2016 20:02

Собираю в FB.

illuzor 22.03.2016 21:41

Распакуйте ane, найдите в нём jar, распакуйте этот jar и покажите его содержимое.
Или дайте само ane посмотреть.

Nnget 23.03.2016 06:00

Вложений: 3
Стараюсь собрать ANE отображающую GoogleMaps v2

Исходники ниже

Вот код добавляющий карту
На активности создается AbsoluteLayout и на нем отображаем MapFragment.

Код AS3:

        public static void init(FREContext Context,int x,int y,int width,int height)
        {
                if (mapFragment!=null) return;
 
                Activity act=Context.getActivity();
 
                FragmentManager fm=act.getFragmentManager();
 
                if (fm==null)
                {
                        Toast toast3 = Toast.makeText(Context.getActivity(), "fm is null", Toast.LENGTH_SHORT);
                        toast3.show();
                }
 
                AbsoluteLayout aLayout = new AbsoluteLayout(act);
                aLayout.setX(x);
                aLayout.setY(y);
                LayoutParams linLayoutParam = new LayoutParams(width, height);
                aLayout.setId(12234543);
                act.addContentView(aLayout, linLayoutParam);
 
 
        LayoutParams lpView2 = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
 
        mapFragment=new MapFragment();
                fm.beginTransaction()
                .add(12234543,mapFragment)
                .commit();
 
        mapFragment.getMapAsync(new OnMapReadyCallback() {
 
                        @Override
                        public void onMapReady(GoogleMap Gmap) {
                                googleMap=Gmap;
                        }
                });
 
        }

В нативном приложении этот код работает. В собранной ANE добавляется AbsoluteLayout aLayout с которым можно работать. Но при добавлении кода карты все заканчивается на этой строчке mapFragment=new MapFragment();

Манифест:

Код:

<android>
        <manifestAdditions><![CDATA[
                        <manifest android:installLocation="auto">
                                <uses-sdk android:minSdkVersion="12" android:targetSdkVersion="19" />
 
                                <uses-permission android:name="android.permission.INTERNET"/>
                                <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
                                <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
                                <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
                                <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
                                <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
                             
                            <application>

                                        <meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="ХХХХ" />
                                        <meta-data android:name="com.google.android.gms.version" android:value="6587000" />

                            </application>
                        </manifest>
                       
                ]]></manifestAdditions>
    </android>


illuzor 23.03.2016 14:44

http://images.illuzor.com/uploads/jar.png

Зачем весь проект то в jar паковать?
Теперь надо выяснить, что за ошибка происходит. Что logcat говорит?

Nnget 23.03.2016 18:31

Вложений: 3
Цитата:

Зачем весь проект то в jar паковать?
Это был момент отчаяния

В момент обращения к init карты и загрузке приложения единственное сообщение:

03-23 19:06:11.856: I/AVC(18981): 78c34c80

Единственная ошибка-акселерометра. связано это с тем, что с эмулятора запускаю.

Сейчас сравниваю с запуском такой-же карты на нативке и там есть строчки, ответа google maps api

log.txt-все логи со старта приложения
log1.txt- логи в момент вызова init
log3.txt-лог нативной карты

illuzor 23.03.2016 20:43

Цитата:

Сообщение от Nnget (Сообщение 1192886)
В момент обращения к init карты и загрузке приложения единственное сообщение

Это странно, logcat должен значительно больше инфы выдавать.

Nnget 23.03.2016 23:44

Вложений: 1
Добыл таки с приложения эту ошибку:

Could not find class '***.MapFragment'? references from method ****.init

Если в jar этот класс есть, чего не хватает?

ShockWave512 24.03.2016 01:10

может не видит в конечной платформе, была похожая штука лечил вложением нужных JAR в структуру папок ане:
\ane\android\libs\armeabi
\ane\android\libs\armeabi-v7a
\ane\default\libs\armeabi
\ane\default\libs\armeabi-v7a

illuzor 24.03.2016 01:59

Лучше сразу собрать ane с Android-x86 платформой. Пример
Нет, это точно не при чём.

И ещё, лучше собирать под последнюю версию AIR, а не под древнюю 3.5.

Nnget 24.03.2016 05:07

Все получилось, карта заработала. Спасибо всем кто ответил.
Проблемы были следующие:
1) Необходимо подключить google Play services.
2) Подключать внешние библиотеки через экспорт не правильный способ! Их необходимо отдельно класть в сборку ане и прописывать в xml. Особенно проблемы возникли с библиотекой google-play-services.jar состоящей из бинарных файлов.

Единственный вопрос. Для AbsoluteLayout при добавление взял радомный ID:
.setId(12234543);

Как правильно в андройде задать ID при программном добавлении элемента ? Пробовал через тег работать, но тогда MapFragment в упор не видит AbsoluteLayout.

ShockWave512 24.03.2016 09:54

Цитата:

Их необходимо отдельно класть в сборку ане и прописывать в xml
а можно тут подробней? есть линк?

Nnget 25.03.2016 03:10

Как и писал, проблема возникла при добавлении jar с бинарными классами. не хотел упаковщик их кушать.

В папку для конкретной платформы добавил файл platform.xml
Вот примерное содержание xml:

<platform xmlns="http://ns.adobe.com/air/extension/20.0">
<packagedDependencies>
<packagedDependency>google-play-services.jar</packagedDependency>
</packagedDependencies>
<packagedResources>
<packagedResource>
<packageName>com.google.android.gms</packageName>
<folderName>google-play-services-res</folderName>
</packagedResource>
<packagedResource>
<packageName>com.distriqt.extension.googleplayservices</packageName>
<folderName>distriqt-extension-googleplayservices-res</folderName>
</packagedResource>
</packagedResources>
</platform>

packagedDependencies-перечень дополнительных библиотек
packagedResources-содержимое res

За правильность способа не отвечаю, но помогло в отличие от простого копирования *jar в папку со сборкой.

Моя ane с картой. Буду обновлять по мере работы
https://github.com/nnget/ANE-GoogleMaps-API-v2


Часовой пояс GMT +4, время: 17:00.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.