2014-12-08 11 views
10

Od wersji 2.4 Groovy obsługuje Androida. Chcę uruchomić skrypt Groovy osadzony w Javie w mojej aplikacji na Androida.Wykonywanie skryptów Groovy osadzonych w Javie w środowisku wykonawczym dla Androida

Ta strona wyjaśnia, że ​​jest to możliwe: http://melix.github.io/blog/2014/06/grooid2.html

Jedną z trudności w dostosowaniu języka Groovy jest to, jak my powiedział, Groovy jest bardzo dynamiczny język. Jedną z jego możliwości jest wykonywanie skryptów w środowisku wykonawczym. A co jeśli chcemy napisać skrypt Groovy na urządzeniu i wykonać go bezpośrednio na nim? Czy to możliwe? W rzeczywistości, tak, to jest możliwe, biorąc pod uwagę, że skorzystasz z tego procesu:

można mieć aplikację, napisany w Groovy lub nie, ale w końcu, gdy aplikacja jest uruchomiona, masz kod źródłowy Groovy że chcesz chcesz wykonać. Następnie należy skompilować klasy, wywołać dex bezpośrednio na urządzeniu, spakować wynik do pliku JAR w lokalnym systemie plików , a następnie załadować go za pomocą specjalnego programu ładującego klasy. Dlaczego więc jest to możliwe, proces ten jest bardzo złożony, a nie prosty, , ale co ważniejsze, jest dramatycznie wolny.

Jestem podekscytowany, że jest to rzeczywiście możliwe, niezależnie od prędkości. Oto przykładowy projekt tutaj: https://github.com/melix/grooidshell-example.

Niestety nie bardzo rozumiem ten proces. Mam projekt, który jest dość mały, ale nie jestem pewien, gdzie dokładnie patrzeć.

Czy możesz wskazać mi właściwy kierunek wykonywania skryptów Groovy osadzonych w Javie w środowisku wykonawczym dla Androida?

Odpowiedz

5

bliżej przyjrzeć https://github.com/melix/grooidshell-example/blob/master/GroovyDroid/src/main/java/me/champeau/groovydroid/GrooidShell.java

to stworzyć DexFile (linia 71) instancji, dodać procesor kodu bajtowego pocztą na kompilacji (linia 73) do podjęcia wygenerowanych bajtów klas i przełożyć je do dex format (linia 76) i wreszcie przechowuje to w pliku dexfile (linia 77). Następnie pobierz kod bajtowy dalvik (linia 91), użyj DexClasLoader (wiersz 136), aby załadować klasy dalvik/dex (linia 138).

+0

Witam, obecnie próbuję wdrożyć Twoje kroki. Mam problem z linią 136: Nie wiem, jakiej wartości użyć dla argumentu classLoader. W tym przykładzie otrzymuje obiekt klasy ClassLoader podczas inicjowania programu, ale ja tego nie robię. Co mam zrobić z tym argumentem? – Voldemort

+0

Program ładujący klasy pochodzi z działania w tym przykładzie: https://github.com/melix/grooidshell-example/blob/master/GroovyDroid/src/main/java/me/champeau/groovydroid/GroovyActivity.groovy#L35 – blackdrag

Powiązane problemy