2 single: Ring2EXE による Ring アプリケーションの配布方法; はじめに
4 ===============================================
5 Ring2EXE による Ring アプリケーションの配布方法
6 ===============================================
8 Ring アプリケーションの配布方法を学びます。
10 現在は、スグレモノである RingEXE (Ring 1.6 以降) があります。
12 Ring2EXE で Windows, Linux, macOS およびモバイル・アプリケーションを手軽に配布できます。
14 .. note:: Ring ノートパッドの配布メニューも使えます (最も簡単な方法)。
17 pair: Ring2EXE による Ring アプリケーションの配布方法; Ring2EXE の用法
24 ring2exe ファイル名.ring [オプション]
26 プログラムの入力として ファイル名.ring を指定します
32 ファイル名.ringo (Ring オブジェクトファイル - コンパイラにより生成)
33 ファイル名.c (このプログラムにより生成された
36 ファイル名_buildvc.bat (Visual C/C++ で filename.c をビルドするために実行します)
37 ファイル名_buildgcc.bat (GNU C/C++ で filename.c をビルドするために実行します)
38 ファイル名_buildclang.bat (CLang C/C++ で filename.c をビルドするために実行します)
39 ファイル名.obj (Visual C/C++ コンパイラにより生成されます)
40 ファイル名.exe (Visual C/C++ リンカにより生成されます)
41 ファイル名 (実行ファイル - Linux および macOS プラットフォームにおいて)
44 pair: Ring2EXE による Ring アプリケーションの配布方法; Ring2EXE の動作方法
49 最初に Ring コンパイラで Ring オブジェクトファイル (\*.ringo) を生成します。
51 C コンパイラ (オプション扱い) が存在する場合、このオブジェクトファイルは C ソースコードファイル内部へ埋め込まれます。
53 その後に、コンパイラと Ring ライブラリ (Ring 仮想計算機も組み込まれます) で実行ファイルを生成します!
55 C コンパイラが存在しない場合は Ring 実行ファイルのコピーを行い、アプリケーション名へ名称変更されます。
57 そして Ring オブジェクトファイルは (\*.ringo) 起動時に実行される ring.ringo が実行ファイルとなります。
59 よって Ring2EXE を使用する電子計算機へ C コンパイラを導入したほうが簡単で良いです。
62 pair: Ring2EXE による Ring アプリケーションの配布方法; 用例
71 see "Hello, World!" + nl
73 Windows, Linux または macOS 用の実行可能ファイルをビルドするには
79 プログラムを実行するには (Windows)
85 プログラムを実行するには (Linux と macOS)
93 pair: Ring2EXE による Ring アプリケーションの配布方法; オプション
100 -keep : 一時作業用ファイルを削除しない
101 -static : スタンドアロン形式による実行ファイルのビルド
102 (ring.dll/ring.so/ring.dylib を使用しない)
103 -gui : GUI アプリケーションのビルド (コンソールウィンドウの非表示)
104 -dist : 配布対象のアプリケーションを準備
105 -allruntime : 配布物へ全てのライブラリを同梱
106 -mobileqt : モバイル版 Ring アプリケーションの配布準備で用いる Qt プロジェクトを準備
107 -noqt : 配布物から RingQt を削除
108 -noallegro : 配布物から RingAllegro を削除
109 -noopenssl : 配布物から RingOpenSSL を削除
110 -nolibcurl : 配布物から RingLibCurl を削除
111 -nomysql : 配布物から RingMySQL を削除
112 -noodbc : 配布物から RingODBC を削除
113 -nosqlite : 配布物から RingSQLite を削除
114 -noopengl : 配布物から RingOpenGL を削除
115 -nofreeglut : 配布物から RingFreeGLUT を削除
116 -nolibzip : 配布物から RingLibZip を削除
117 -noconsolecolors : 配布物から RingConsoleColors を削除
118 -nomurmuhash : 配布物から RingMurmurHash を削除
119 -nocruntime : 配布物から C ランタイムを削除
120 -qt : 配布物へ RingQt を追加
121 -allegro : 配布物へ RingAllegro を追加
122 -openssl : 配布物へ RingOpenSSL を追加
123 -libcurl : 配布物へ RingLibCurl を追加
124 -mysql : 配布物へ RingMySQL を追加
125 -odbc : 配布物へ RingODBC を追加
126 -sqlite : 配布物へ RingSQLite を追加
127 -postgresql : 配布物へ RingPostgreSQL を追加
128 -opengl : 配布物へ RingOpenGL を追加
129 -freeglut : 配布物へ RingFreeGLUT を追加
130 -libzip : 配布物へ RingLibZip を追加
131 -libuv : 配布物へ RingLibuv を追加
132 -consolecolors : 配布物へ RingConsoleColors を追加
133 -murmurhash : 配布物へ RingMurmurHash を追加
134 -cruntime : 配布物へ C ランタイムを追加
137 pair: Ring2EXE による Ring アプリケーションの配布方法; スタンドアロン形式によるコンソールアプリケーションのビルド方法
139 スタンドアロン形式によるコンソールアプリケーションのビルド方法
140 ==============================================================
142 “-static” オプションはコンソールアプリケーションの実行ファイルをビルドします (静的リンク)。
144 こうすると Ring 動的リンクライブラリ (ring.dll, ring.so または ring.dylib) を使用しません (不要になります)。
146 ほかのライブラリを使うには、アプリケーションでライブラリをインクルードしてください。
150 ring2exe test.ring -static
154 pair: Ring2EXE による Ring アプリケーションの配布方法; RingAllegro アプリケーションの配布方法
156 RingAllegro アプリケーションの配布方法
157 ======================================
159 この内容のコードが test2.ring にあります。
164 # Ring2EXE ツールのテスト用プログラムです!
167 load "gameengine.ring" # ゲームエンジンへ制御権を渡します。
169 func main # ゲームエンジンから呼び出されます。
171 oGame = New Game # ゲームオブジェクトの作成
173 title = "My First Game"
177 ゲームの配布用に実行可能ファイルのビルドと準備をするには
179 “-dist” および “-allruntime” オプションで全てのライブラリをインクルードします。
183 ring2exe test2.ring -dist -allruntime
187 * Windows : target/windows フォルダ
189 * Linux : target/linux フォルダ
191 * macOS : target/macos フォルダ
193 前述のコマンドは、全ての Ring ランタイムライブラリを配布物へ追加します。
195 しかし RingAllegro のみ必要な場合は、このコマンドのほうが良いです。
199 ring2exe test2.ring -dist -allegro -cruntime
201 これは、不要なランタイムファイルを除外することで配布物の容量を削減します!
203 また “-gui” オプションでコンソールウィンドウを非表示にできます。
209 ring2exe test2.ring -dist -gui -allegro -cruntime
212 pair: Ring2EXE による Ring アプリケーションの配布方法; RingQt アプリケーションの配布方法
215 =================================
217 この内容のコードが test3.ring にあります。
221 # Ring2EXE ツールのテスト用プログラムです!
228 setwindowtitle("Hello, World!")
236 GUI アプリケーションの配布用に、実行可能ファイルのビルドと準備をするには
238 “-dist” および “-allruntime” オプションで全てのライブラリをインクルードします。
242 ring2exe test3.ring -dist -allruntime
246 * Windows : target/windows フォルダ
248 * Linux : target/linux フォルダ
250 * macOS : target/macos フォルダ
252 前述のコマンドは全ての Ring ランタイムライブラリを配布物へ追加します。
254 RingQt のみ必要ならば、このコマンドのほうが良いです。
258 ring2exe test3.ring -dist -qt -cruntime
260 これは、不要なランタイムファイルを除外することで配布物の容量を削減します!
262 また “-gui” オプションによりコンソールウィンドウを非表示にできます。
268 ring2exe test3.ring -dist -gui -qt -cruntime
271 pair: Ring2EXE による Ring アプリケーションの配布方法; モバイル用アプリケーションの配布方法 (RingQt)
273 モバイル用アプリケーションの配布方法 (RingQt)
274 =============================================
276 “-mobileqt” オプションで RingQt アプリケーション (test3.ring) 用の Qt プロジェクトを準備します。
282 ring2exe test3.ring -dist -mobileqt
284 前述のコマンドを実行後、 target/mobile/qtproject フォルダに Qt プロジェクトがあります。
286 メインのプロジェクトファイルは project.pro です。 Qt Creator IDE で開くことができます。
288 またリソースファイルもあります : project.qrc
290 別の重要なファイルは C++ メインファイルです : main.cpp
294 pair: Ring2EXE による Ring アプリケーションの配布方法; モバイル版 Cards ゲームのビルド方法 (RingQt)
296 モバイル版 Cards ゲームのビルド方法 (RingQt)
297 ============================================
299 このフォルダにある Cards ゲームは Ring を使用した Android パッケージのビルド方法の良例であると考えられます:
300 ring/application/cards
302 Cards ゲームのフォルダには三本のファイルがあります
304 * cards.ring : ゲームのソースコード
306 * cards.jpg : ゲームで使用される画像ファイル
308 * project.qrc : Qt プロジェクトで使用されるリソースファイル
316 <file>cards.ringo</file>
317 <file>cards.jpg</file>
323 一本目のファイルは cards.ringo (Ring オブジェクトファイル) であり、二本目のファイルは cards.jpg (画像ファイル) です。
325 まず、 Ring2EXE でリソースファイル (target/mobile/qtproject/project.qrc) を生成します。
327 しかし、このファイルの内容は cards.ringo のみです (Ring2EXE は Ring コンパイラを呼び出すことにより生成します)。
329 このリソースファイルへ画像を追加してから必ず更新してください : cards.jpg
331 更新後にメインのアプリケーションファイルへリソースファイルをコピーします。
333 Ring2EXE の再実行時に更新済みリソースファイルを使用します!
335 これでモバイル用の Card ゲームのビルドが行えます。
341 ring2exe cards.ring -dist -mobileqt
343 (2) Qt Creator で target/mobile/qtproject/project.pro を開きます。
345 (3) Qt Creator でビルドと実行を行います。
348 Cards ゲームで画像ファイルを検出する方法は?
350 RingQt にはシンプルな関数があります: AppFile()
352 関数はデスクトップまたはモバイルプラットフォームでアクセスするファイルを決定するために使えます。
354 このコードは cards.ring からの引用です。
358 mypic = new QPixmap(AppFile("cards.jpg"))
360 必要ならば AppFile() 関数を画像ファイルに使用します!
363 pair: Ring2EXE による Ring アプリケーションの配布方法; モバイル版 Weight History アプリケーションのビルド方法 (RingQt)
365 モバイル版 Weight History アプリケーションのビルド方法 (RingQt)
366 ===============================================================
368 このフォルダにある Weight History アプリケーションは Ring による Android パッケージのビルド方法であり
369 Ring2EXE と Qt を使用したモバイル・アプリケーションを配布するための別例であると考えられます:
371 ring/application/weighthistory
373 Weight History アプリケーションのフォルダには四本のファイルがあります
375 * weighthistory.ring : アプリケーションのソースコード
377 * weighthistory.db : SQLite データベース
379 * project.qrc : Qt プロジェクト用のリソースファイル
381 * main.cpp : Qt プロジェクト用のメイン C++ ソースファイル
383 モバイル用の Weight History アプリケーションをビルドするには
389 ring2exe weighthistory.ring -dist -mobileqt
391 (2) Qt Creator で target/mobile/qtproject/project.pro を開きます。
393 (3) Qt Creator でビルドと実行を行います。
395 リソースファイル (project.qrc) には以下のファイルが記載されています。
401 <file>weighthistory.ringo</file>
402 <file>weighthistory.db</file>
406 weighthistory.ringo は Ring オブジェクトファイルであり Ring2EXE が Ring コンパイラを呼び出すことで生成します。
408 weighthistory.db はデータベースファイルです。
410 main.cpp には小規模な更新があるため、モバイル機器の書き込み可能なリソースの場所へデータベースファイルをコピーしてください。
415 path3 = path+"/weighthistory.db";
416 QFile::copy(":/weighthistory.db",path3);
418 この作業はデータベースファイルのみ行う必要があります!
420 Ring2EXE 使用時、ツールは project.qrc および main.cpp の確認を行い、存在する場合は更新されたファイルとして
422 Ring2EXE により生成されたデフォルト版である target/mobile/qtproject を使用します。
424 よって Ring2EXE でファイルを更新した後に、更新する時にアプリケーションのフォルダへファイルをコピーするために使用してください。
427 pair: Ring2EXE による Ring アプリケーションの配布方法; フォームデザイナーをモバイル機器用にビルドするには (RingQt)
429 フォームデザイナーをモバイル機器用にビルドするには (RingQt)
430 ===========================================================
432 モバイル用のアプリケーションをフォームデザイナー・アプリケーション (ring/applications/formdesigner) でビルドをするには
438 ring2exe formdesigner.ring -dist -mobileqt
440 (2) Qt Creator で target/mobile/qtproject/project.pro を開きます。
442 (3) Qt Creator でビルドと実行を行います。
444 ring/application/formdesigner フォルダにはリソースファイルがあります : project.qrc
446 Ring2EXE により自動的に使用されます。
452 <file>formdesigner.ringo</file>
453 <file>image/allevents.png</file>
454 <file>image/checkbox.png</file>
455 <file>image/close.png</file>
456 <file>image/combobox.bmp</file>
457 <file>image/datepicker.bmp</file>
458 <file>image/dial.png</file>
459 <file>image/formdesigner.png</file>
460 <file>image/frame.png</file>
461 <file>image/grid.bmp</file>
462 <file>image/hyperlink.png</file>
463 <file>image/image.png</file>
464 <file>image/label.png</file>
465 <file>image/layout.png</file>
466 <file>image/lcdnumber.png</file>
467 <file>image/listview.png</file>
468 <file>image/lock.png</file>
469 <file>image/new.png</file>
470 <file>image/open.png</file>
471 <file>image/progressbar.png</file>
472 <file>image/project.png</file>
473 <file>image/pushbutton.png</file>
474 <file>image/radiobutton.png</file>
475 <file>image/save.png</file>
476 <file>image/saveas.png</file>
477 <file>image/select.png</file>
478 <file>image/slider.png</file>
479 <file>image/spinner.bmp</file>
480 <file>image/statusbar.png</file>
481 <file>image/tab.png</file>
482 <file>image/textarea.png</file>
483 <file>image/textfield.png</file>
484 <file>image/timer.png</file>
485 <file>image/toolbar.png</file>
486 <file>image/tree.bmp</file>
487 <file>image/videowidget.png</file>
488 <file>image/webview.png</file>
492 Cards ゲームと同様、フォームデザイナーは AppFile() 関数を画像ファイル名を決定するために使用します。
494 このコードは ring/applications/formdesigner/mainwindow/formdesignerview.ring からの引用です。
500 new qtoolbutton(win) {
501 setbtnimage(self,AppFile("image/new.png"))
502 setclickevent(Method(:NewAction))
503 settooltip("New File")
505 new qtoolbutton(win) {
506 setbtnimage(self,AppFile("image/open.png"))
507 setclickevent(Method(:OpenAction))
508 settooltip("Open File")
510 new qtoolbutton(win) {
511 setbtnimage(self,AppFile("image/save.png"))
512 setclickevent(Method(:SaveAction))
515 new qtoolbutton(win) {
516 setbtnimage(self,AppFile("image/saveas.png"))
517 setclickevent(Method(:SaveAsAction))
518 settooltip("Save As")
520 new qtoolbutton(win) {
521 setbtnimage(self,AppFile("image/close.png"))
522 setclickevent(Method(:ExitAction))
527 tool1 = win.addtoolbar("files") {
528 for x in aBtns { addwidget(x) addseparator() }
531 この用例でサブフォルダでの画像の用法を理解できます。
535 pair: Ring2EXE による Ring アプリケーションの配布方法; Qt リソースファイルの作成方法 (Folder2qrc)
537 Qt リソースファイルの作成方法 (Folder2qrc)
538 ==========================================
540 大量の画像とファイルを有する大規模 RingQt プロジェクトがある場合、モバイル・アプリケーションの配布時にリソースファイル (\*.qrc) へファイルを必ず追加してください。
542 Ring 1.6 以降では Folder2qrc ツールにより、一つずつファイルを追加する必要がなくなるので時間の節約になります。
548 folder2qrc formdesigner.ring
550 アプリケーションフォルダに移動している間に、メインソースファイルの決定をするために
551 Folder2qrc は現在のフォルダとサブフォルダにある全てのファイルを確認します。
552 そして mainfile.ringo の後にリソースファイルを追加します (この用例ではformdesigner.ringo です)。
556 ファイルを開く、または削除するためにリソースは不要です!
560 pair: Ring2EXE による Ring アプリケーションの配布方法; Ring2EXE に関する重要情報
563 =========================
565 * Ring2EXE で配布物を準備すると、古い配布物にあるファイルを全て削除します。
567 例えば target/windows が使用される場合は
571 ring2exe test3.ring -dist -allruntime
573 target/windows にあるファイルは再びファイルを追加する前に削除されます。
575 これは、モバイル機器用の配布物を準備するときに重要となります。
579 ring2exe test3.ring -dist -mobileqt
581 リソースファイルの修正時、 project.qrc やメインファイル main.cpp をアプリケーションフォルダへコピーすることを忘れないように注意してください!
583 前述のコマンドを再実行すると、 Ring2EXE で更新版を使えます!
585 * Ring2EXE は Ring 記述しています。こちらからソースコードを読むことができます
587 https://github.com/ring-lang/ring/blob/master/ring2exe/ring2exe.ring
589 * ライブラリの情報は個々の独立したファイルに記録されています。よって将来、新しいライブラリへ対応する場合は、このファイルを自動的に更新できます。
591 https://github.com/ring-lang/ring/blob/master/ring2exe/libs