Autor Wątek: [Android + AIR] Nic nie widać  (Przeczytany 3857 razy)

Offline dynax

  • Użytkownik

# Lipiec 10, 2012, 19:56:17
goshki polecił niedawno na forum bibliotekę Axel do środowiska AIR. Postanowiłem sprawdzić jak ona działa więc pobrałem i skonfigurowałem wedle zaleceń z tutoriala. Program działa doskonale odpalony na desktopie. Niestety kiedy buduję paczkę na Androida i odpalam na emulatorze - nic nie widać. Aplikacja odpala się i ekran jest pokryty kolorem zdefiniowanym w project properties ale nie widać nic co chciałem narysować. Tak jakby mój PlayState() nigdy się nie odpalał.

Konfiguracja emulatora:
Android 4.0.3 - ARMv7a
Włączony GPU Emulation
256 MiB RAM

Konfiguracja projektu:
Addtional compile options: -swf-version=13
Target framework: AIR mobile 3.3

Main.as
package {

import flash.desktop.NativeApplication;
import flash.events.Event;
import flash.display.Sprite;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.ui.Multitouch;
import flash.ui.MultitouchInputMode;

public class Main extends Sprite {

public function Main() : void {
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;
stage.addEventListener(Event.DEACTIVATE, deactivate);

// touch or gesture?
Multitouch.inputMode = MultitouchInputMode.TOUCH_POINT;

// entry point
var game : AxlGame = new AxlGame();
addChild(game);
}

private function deactivate(e:Event) : void {
NativeApplication.nativeApplication.exit();
}

}

}

AxlGame.as
package {
    import org.axgl.Ax;

    public class AxlGame extends Ax {

        public function AxlGame() {
            super(PlayState);
        }

    }
}

application.xml
<?xml version="1.0" encoding="utf-8"?>
<application xmlns="http://ns.adobe.com/air/application/3.0">

  <id>air.TestAndroidAxl</id>
  <versionNumber>0.1</versionNumber>
  <supportedProfiles>mobileDevice</supportedProfiles>
  <filename>TestAndroidAxl</filename>
  <name>TestAndroid_Axl</name>
 
  <android>
<manifestAdditions><![CDATA[<manifest android:installLocation="auto">
<uses-permission android:name="android.permission.INTERNET" />
<uses-feature android:required="true" android:name="android.hardware.touchscreen.multitouch" />
</manifest>]]></manifestAdditions>
  </android>
 
  <initialWindow>
    <title>TestAndroid_Axl</title>
    <content>TestAndroidAxl.swf</content>
    <visible>true</visible>
    <fullScreen>false</fullScreen>
    <!--<autoOrients>false</autoOrients>-->
    <!--<aspectRatio>landscape</aspectRatio>-->
    <renderMode>direct</renderMode>
    <systemChrome>standard</systemChrome>
    <aspectRatio>landscape</aspectRatio>
  </initialWindow>
 
  <icon>
    <image48x48>icons/icon_48.png</image48x48>
    <image57x57>icons/icon_57.png</image57x57>
    <image72x72>icons/icon_72.png</image72x72>
    <image114x114>icons/icon_114.png</image114x114>
    <image512x512>icons/icon_512.png</image512x512>
  </icon>
</application>

Logcat sypie niepokojącym warningiem (może to jest przyczyna):
W/ActivityManager( 82): No content provider found for permission revoke: file:///data/local/tmp/TestAndroidAxl.apk

W/ActivityManager( 82): No content provider found for permission revoke: file:///data/local/tmp/TestAndroidAxl.apk

I/PackageManager( 82): Removing non-system package:air.air.TestAndroidAxl

I/ActivityManager( 82): Force stopping package air.air.TestAndroidAxl uid=10044

Sprawdzałem chyba wszystkie możliwe źródła i nic nie znalazłem. Ma ktoś jakieś rozwiązanie? Pozdrawiam.

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline Radarek

  • Użytkownik

# Lipiec 10, 2012, 20:58:35
Zainstaluj najnowsze AIR sdk (3.3) i zmień parametr swf-version z 13 na 15. Daj znać czy pomogło.

Offline dynax

  • Użytkownik

# Lipiec 10, 2012, 21:06:44
Teraz oprócz zawieszonego ekranu pojawia się okienko "TestAndroid_Alx is not responding. Force close?".


Offline dynax

  • Użytkownik

# Lipiec 11, 2012, 00:28:57
Próbowałem :) Nie działa.

EDIT: Lecz aplikacja się nie zawiesiła a od razu zamknęła a logcat zwraca co innego:

I/ActivityManager(   82): Displayed air.air.TestAndroidAxl/.AppEntry: +3s393ms
I/Process (  554): Sending signal. PID: 554 SIG: 9
I/Process (  540): Sending signal. PID: 540 SIG: 9
I/ActivityManager(   82): Process com.adobe.air (pid 554) has died.
W/InputDispatcher(   82): channel '415cad08 air.air.TestAndroidAxl/air.air.TestAndroidAxl.AppE
try (server)' ~ Consumer closed input channel or an error occurred.  events=0x8
E/InputDispatcher(   82): channel '415cad08 air.air.TestAndroidAxl/air.air.TestAndroidAxl.AppE
try (server)' ~ Channel is unrecoverably broken and will be disposed!
I/WindowManager(   82): WIN DEATH: Window{415cad08 air.air.TestAndroidAxl/air.air.TestAndroidA
l.AppEntry paused=false}
W/InputDispatcher(   82): Attempted to unregister already unregistered input channel '415cad08
air.air.TestAndroidAxl/air.air.TestAndroidAxl.AppEntry (server)'
I/ActivityManager(   82): Process air.air.TestAndroidAxl (pid 540) has died.
W/ActivityManager(   82): Force removing ActivityRecord{4148b238 air.air.TestAndroidAxl/.AppEn
ry}: app died, no saved state
W/NetworkManagementSocketTagger(   82): setKernelCountSet(10044, 0) failed with errno -2
I/WindowManager(   82): WINDOW DIED Window{415cad08 air.air.TestAndroidAxl/air.air.TestAndroid
xl.AppEntry paused=false}
W/EGL_emulation(  177): eglSurfaceAttrib not implemented
W/InputManagerService(   82): Got RemoteException sending setActive(false) notification to pid
540 uid 10044
« Ostatnia zmiana: Lipiec 11, 2012, 01:03:24 wysłana przez dynax »

Offline goshki

  • Użytkownik
    • Vigeo Games

# Lipiec 11, 2012, 09:40:10
Próbowałem :) Nie działa.

EDIT: Lecz aplikacja się nie zawiesiła a od razu zamknęła a logcat zwraca co innego:

I/ActivityManager(   82): Displayed air.air.TestAndroidAxl/.AppEntry: +3s393ms
I/Process (  554): Sending signal. PID: 554 SIG: 9
I/Process (  540): Sending signal. PID: 540 SIG: 9
I/ActivityManager(   82): Process com.adobe.air (pid 554) has died.
W/InputDispatcher(   82): channel '415cad08 air.air.TestAndroidAxl/air.air.TestAndroidAxl.AppE
try (server)' ~ Consumer closed input channel or an error occurred.  events=0x8
E/InputDispatcher(   82): channel '415cad08 air.air.TestAndroidAxl/air.air.TestAndroidAxl.AppE
try (server)' ~ Channel is unrecoverably broken and will be disposed!
I/WindowManager(   82): WIN DEATH: Window{415cad08 air.air.TestAndroidAxl/air.air.TestAndroidA
l.AppEntry paused=false}
W/InputDispatcher(   82): Attempted to unregister already unregistered input channel '415cad08
air.air.TestAndroidAxl/air.air.TestAndroidAxl.AppEntry (server)'
I/ActivityManager(   82): Process air.air.TestAndroidAxl (pid 540) has died.
W/ActivityManager(   82): Force removing ActivityRecord{4148b238 air.air.TestAndroidAxl/.AppEn
ry}: app died, no saved state
W/NetworkManagementSocketTagger(   82): setKernelCountSet(10044, 0) failed with errno -2
I/WindowManager(   82): WINDOW DIED Window{415cad08 air.air.TestAndroidAxl/air.air.TestAndroid
xl.AppEntry paused=false}
W/EGL_emulation(  177): eglSurfaceAttrib not implemented
W/InputManagerService(   82): Got RemoteException sending setActive(false) notification to pid
540 uid 10044

A sprawdzałeś jakieś inne przykłady korzystające ze Stage3D? Np. coś ze Starlinga (zgodnie z tymi wytycznymi)? Albo w ogóle cokolwiek z AIR?

Btw. spróbuj zmienić w application.xml:

<fullScreen>false</fullScreen>
na:

<fullScreen>true</fullScreen>
« Ostatnia zmiana: Lipiec 11, 2012, 10:02:03 wysłana przez goshki »

Offline dynax

  • Użytkownik

# Lipiec 11, 2012, 12:16:24
Po zmianie tego fullscreen na true kod na Androidzie działa tak samo jak działał, tylko, że pod Windowsem obraz się rozjeżdża (viewport zaczyna się gdzieś w połowie okna i jest ucinany przez jego krawędzie). Ten fullscreen zmieniałem wcześniej celowo, bo ten błąd u mnie występował i przeczytałem na forum sterlinga, że fullscreen trzeba dać na false.

EDIT: Testowałem przykładowy kod Stage3D i też nie działa. Dokładnie taki sam błąd jak przy Axelu - pusty ekran.

EDIT2: Może powinienem ściągnąć AIR 3.2 a nie AIR 3.3? Tylko skąd  to teraz wytrzasnąć?
« Ostatnia zmiana: Lipiec 11, 2012, 12:43:56 wysłana przez dynax »

Offline dynax

  • Użytkownik

# Lipiec 11, 2012, 21:24:20
Nowe fakty w sprawie błędu. Po obserwacji zachowania Starlinga i Axela oraz kilku godzinach z debuggerem zauważyłem, że błąd pojawia się w funkcji zarejestrowanej przez:

stage3D.addEventListener(ErrorEvent.ERROR, ...);

Starling nazywa ten błąd "This application is not correctly embedded" i autorzy radzą ustawić <renderMode> na direct. I wszystko byłoby w porządku gdybym już nie zrobił tego wcześniej. renderMode mam ustawiony na direct a błąd pojawia się dalej :(

Offline goshki

  • Użytkownik
    • Vigeo Games

# Lipiec 12, 2012, 09:53:40
Starling nazywa ten błąd "This application is not correctly embedded" i autorzy radzą ustawić <renderMode> na direct. I wszystko byłoby w porządku gdybym już nie zrobił tego wcześniej. renderMode mam ustawiony na direct a błąd pojawia się dalej :(

A może to kwestia tego, że masz aktywną emulację GPU w emulatorze AVD? Zastanawia mnie czy ten błąd pojawiłby się na fizycznym urządzeniu.

Offline dynax

  • Użytkownik

# Lipiec 12, 2012, 12:53:06
Mam aktywną emulacje GPU więc powinno śmigać. Może ktoś jest na tyle dobry, że przetestuje ten plik na fizycznym urządzeniu :). Ma się pojawić szary ekran, kwadrat z gradientem i napis "hello world". Jeśli się pojawia zawieszony żółty ekran i okienko z błędem to źle.

Offline MaxGarden

  • Użytkownik
    • Profil na warsztacie

# Lipiec 12, 2012, 13:13:49
HTC Sensation XL ICS, tylko żółte tło.

Offline dynax

  • Użytkownik

# Lipiec 12, 2012, 14:06:14
Dzięki za test :) W sumie nie wiem jak teraz interpretować ten błąd.

Offline goshki

  • Użytkownik
    • Vigeo Games

# Lipiec 12, 2012, 18:53:34
Odpaliłem Twoją testową aplikację na emulatorze z włączoną emulacją GPU (Android 4.0.3) i pojawia się komunikat o błędzie #3702, czyli że nie jest możliwe utworzenie kontekstu 3D. Ale żadnych dalszych konkretów. Później spróbuję jeszcze odpalić na fizycznym urządzeniu.

Offline lukasyno

  • Użytkownik

# Lipiec 12, 2012, 18:56:01
HTC Sensation XL ICS, tylko żółte tło.

j/w
Andek 4.

Offline dynax

  • Użytkownik

# Lipiec 13, 2012, 16:57:42
@MaxGarden, lukasyno: Nie pojawiła się na środku ekranu informacja o błędzie? Bo jeśli nie to znaczy, że po prostu nie da się utworzyć kontekstu Stage3D na emulatorze a błąd tkwi gdzie indziej.