понедельник, 27 августа 2012 г.

Создание APK файла (Android) из SWF без использования AIR (SWF to APK))

Как загрузить SWF в JAVA и упаковать его в виде файла APK.

Этот урок не является моим собственным, это перевод урока размещенного по данному адресу.


В этом уроке я покажу вам, как загрузить SWF-файл в JAVA и экспортировать его в файл APK, который вы сможете установить на свой телефон Android без установленного в нем AIR или опубликовать его на Android маркете! В этом уроке не будет пояснений к каждой строке кода, или вообще как это работает, в нем я просто покажу, как можно преобразовать свой SWF файл в APK.


Если вы не имеете достаточного опыта с JAVA, то желательно используйте те же имена проекта и файлов, как показано в этом уроке, чтобы избежать возможных ошибок.

Преимущества данного метода:
- Вам не нужно устанавливать AIR, чтобы запустить флеш игры на телефоне Android. Пользователь должен установить только Flash Player!
- Ваше приложение потенциально получит больше загрузок, так как большинство людей не имеют AIR на своём устройстве.

Вам понадобится:
- Установить SDK http://developer.android.com/sdk/installing.html
- ваша игра в формате SWF (в этом уроке она будет иметь название game.swf)
- 3 иконки - 72x72.png, 48x48.png, 36x36.png
- Android версии минимум 2.2

Если у вас есть 3 эти вещи, значит, можете смело приступать! ;-)

1) Откройте Eclipse и перейдите к File-> New-> Android Project

2) В Project Name введите название проекта (я использовал MyGame), нажмите кнопку Next.



В Target Name выберите Andoid 2.2. Нажмите Next.



4) Введите имя приложения( Application Name ), имя пакета( Package Name ) и нажмите кнопку Finish.

5) Вы увидите свой проект в Navigator, как показано на рисунке ниже

6) Найдите на локальном диске место, куда вы сохраняли проект. Там помимо других должны быть 2 важные папки assets и res.

Скопируйте свою SWF в папку assets.


В папке res находятся такие папки как drawable-hdpi, drawable-ldpi и drawable-mdpi. В этих папках будут храниться ваши иконки приложения.  72x72.png (drawable-hdpi), 36x36.png (drawable-ldpi), 48x48.png (drawable-mdpi). Скопируйте ваши иконки в соответствующую папку.

7) Теперь вернемся в Eclipse и откроем main.xml ( res->layout). По умолчанию включен графический макет отображение (graphical layout) переключитесь на main.xml и введите код (текстовый вариант под картинкой).


<?xml version="1.0" encoding="utf-8"?>

<WebView  xmlns:android="http://schemas.android.com/apk/res/android"

    android:id="@+id/webview"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent"

/>

8) Откройте MyGameActivity (у вас может называться по-другому)  src->com->somedomain->MyGame-> и вставьте туда данный код (текст кода под картинкой):


package com.somedomain.MyGame;

import android.app.Activity;

import android.graphics.Color;

import android.os.Bundle;

import android.webkit.WebView;



public class MyGameActivity extends Activity {

 WebView mWebView;

    /** Called when the activity is first created. */

    @Override

    public void onCreate(Bundle savedInstanceState) {

     super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

        mWebView = (WebView) findViewById(R.id.webview);

        mWebView.getSettings().setJavaScriptEnabled(true);

        mWebView.getSettings().setPluginsEnabled(true);

        mWebView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY); 

        mWebView.setBackgroundColor(Color.parseColor("#000000"));

        mWebView.loadUrl("file:///android_asset/game.swf");

  

    }

}

9) Откройте AndroidManifest.xml и изменить код, на то, что вы видите ниже.

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

    package="com.somedomain.MyGame"

    android:versionCode="1"

    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="8" />

   <application

        android:icon="@drawable/ic_launcher"

        android:label="@string/app_name" >

        <activity

            android:screenOrientation="landscape" 

            android:label="@string/app_name"

            android:name=".MyGameActivity"

            android:theme="@android:style/Theme.NoTitleBar.Fullscreen">

            <intent-filter >

                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />

            </intent-filter>

        </activity>

    </application>

 <uses-permission android:name="android.permission.INTERNET" />

</manifest>

Это всё! Теперь можно протестировать игру и экспортировать её в APK!


10) Тест - Нажмите на зеленый круг с белым треугольником посередине (показано на рисунке ниже в левом верхнем углу) и выберите Android Application, нажмите кнопку ОК! Если вы не сделали ошибок, то вы должны увидеть запуск Android эмулятора. Самой игры вы не увидите, так как эмулятор не может открыть SWF (вы увидите черный экран), но вы увидите, есть ли какие-либо ошибки во время компиляции.


11) Для экспорта APK файла вы должны нажать File->Export как показано ниже


12) Выберите Android -> Export Android Application.


13) Нажмите Browse -> выберите ваш проект и нажмите OK.


14) Теперь вы должны использовать свой existing keystore или создать новый(Create new keystore) если у вас его нет. После этого нажмите Next.


15) Выберите в Alias псевдоним и введите пароль.


16) Выберите место, куда хотите сохранить APK и нажмите Finish!


Вот и все! Вы можете запустить APK файл на вашем телефоне, или опубликовать его в Android Market! :-)
Вот игры созданные методом данного урока на Android market.

14 комментариев:

  1. Попробую! Спасибо! Мой сайт dimok.u-gu.ru

    ОтветитьУдалить
  2. Какая эта версия eclips? Для Windows 7 сможете написать как адаптировать?

    ОтветитьУдалить
  3. Спасибо большое! Но где взять keystore ??? очень надо! ответь пожалуйста вот сюда paulkrugley@yandex.by

    ОтветитьУдалить
  4. У меня другая версия прог, пожалуйста переделайте урок под новую версию ADK и Eclipse.

    ОтветитьУдалить
    Ответы
    1. скажите пожалуйста а на какой версии eclipse это все реализовать? на моем eclipse нет такого

      Удалить
    2. В начале урока ссылка уже с установленным дополнением для андроид: http://developer.android.com/sdk/installing.html

      Удалить
  5. Сделал все по уроке, а он мне пишет "the application MyGame(process com.somedomain.mygame) has stopped unexpectedly."С программированием знаком, подскажите куда смотреть.

    ОтветитьУдалить
  6. А ничего будет если я кину SWF файл созданный в Stencyl? В программе Stencyl есть экспорт в APK но надо иметь Pro версию а у меня Free.

    ОтветитьУдалить
  7. а на as2 можно тоже использовать?

    ОтветитьУдалить
  8. А как решить проблему с двойным кликом по флэш ролику? Нажимаю на кнопку у себя в ролике, происходит двойное нажатие в место одного, то есть открывает меню и сразу закрывает. (Кнопка одна на открытие и закрытие меню.)

    ОтветитьУдалить
  9. Пример вообще работает в эмуляторе genymotion?

    ОтветитьУдалить
  10. саму прогу скачиваю полчаса

    ОтветитьУдалить