目次
- SophiaCompress(Java) OASIS とは
- 動作環境
- インストール
- GUI によるアプリ圧縮
- CUI による圧縮
- Eclipse でのアプリ圧縮
- エラーメッセージと使用上の注意
- 圧縮機能
- サポート
- 用語集
1 SophiaCompress(Java) OASIS とは
SophiaCompress(Java) OASIS は、MIDP や Star / DoJa などの 携帯 Java アプリのサイズを実行形式 ( JAR ファイル形式 ) のまま最小化する圧縮ツールです。
圧縮の手順
- JAR ファイルの解凍
- 圧縮
- プリベリファイ
- パッケージング ( JAR ファイルの作成 )
- ADF ファイルの変更
2 動作環境
2.1 システム環境
OS : | Windows 7 / XP |
アプリ開発 Java : | Java 2 SDK 1.3.1 / 1.4.2 |
SophiaCompress(Java) OASIS 起動 Java : | JRE 1.5.0 |
Eclipse : | Eclipse 3.2.1 |
2.2 プロファイル : ( 以下のプロファイルで動作確認しています。)
NTT DoCoMo : DoJa-1.0
プリベリファイヤ
J2ME Wireless SDK for the DoJa release2.2 付属のプリベリファイヤ ( preverify.exe )
ライブラリ
J2ME Wireless SDK for the DoJa release2.2 付属のライブラリ ( dojaapi.jar )
NTT DoCoMo : DoJa-2.0
プリベリファイヤ
DoJa-2.0 API 向け iαppli Development Kit Ver.1.03 付属のプリベリファイヤ ( preverify.exe )
ライブラリ
DoJa-2.0 API 向け iαppli Development Kit Ver.1.03 付属のライブラリ ( classes.zip、doja_classes.zip )
NTT DoCoMo : DoJa-3.0
プリベリファイヤ
iαppli Development Kit for DoJa-3.0 Ver.2.00 付属のプリベリファイヤ ( preverify.exe )
ライブラリ
iαppli Development Kit for DoJa-3.0 Ver.2.00 付属のライブラリ ( classes.zip、doja_classes.zip )
NTT DoCoMo : DoJa-3.5
プリベリファイヤ
iαppli Development Kit for DoJa-3.5 Ver.1.03 付属のプリベリファイヤ ( preverify.exe )
ライブラリ
iαppli Development Kit for DoJa-3.5 Ver.1.03 付属のライブラリ ( classes.zip、doja_classes.zip )
NTT DoCoMo : DoJa-4.0
プリベリファイヤ
iαppli Development Kit for DoJa-4.0 Ver.1.03 付属のプリベリファイヤ ( preverify.exe )
ライブラリ
iαppli Development Kit for DoJa-4.0 Ver.1.03 付属のライブラリ ( classes.zip、doja_classes.zip )
NTT DoCoMo : DoJa-4.1
プリベリファイヤ
iαppli Development Kit for DoJa-4.1 Ver.1.11 付属のプリベリファイヤ ( preverify.exe )
ライブラリ
iαppli Development Kit for DoJa-4.1 Ver.1.11 付属のライブラリ ( classes.zip、doja_classes.zip )
NTT DoCoMo : DoJa-5.0
プリベリファイヤ
iαppli Development Kit for DoJa-5.0 Ver.1.05 付属のプリベリファイヤ ( preverify.exe )
ライブラリ
iαppli Development Kit for DoJa-5.0 Ver.1.05 付属のライブラリ ( classes.zip、doja_classes.zip )
NTT DoCoMo : DoJa-5.1
プリベリファイヤ
iαppli Development Kit for DoJa-5.1 Ver.3.00 付属のプリベリファイヤ ( preverify.exe )
ライブラリ
iαppli Development Kit for DoJa-5.1 Ver.3.00 付属のライブラリ ( classes.zip、doja_classes.zip )
NTT DoCoMo : Star-1.0
プリベリファイヤ
iαppli Development Kit for Star-1.0 Ver.1.00 付属のプリベリファイヤ ( preverify.exe )
ライブラリ
iαppli Development Kit for Star-1.0 Ver.1.00 付属のライブラリ ( classes.zip、star_classes.zip )
KDDI : EZアプリ(Java)
プリベリファイヤ
J2ME Wireless Toolkit version 1.0.4_01 for Windows 付属のプリベリファイヤ ( preverify.exe )
ライブラリ
EZアプリ(Java) 開発キット ( ezplus Emulator version 1.0 ) に付属のライブラリ ( kddip.jar )
J2ME Wireless Toolkit version 1.0.4_01 for Windows 付属のライブラリ ( midpapi.zip )
KJX メーカ
EZ アプリ(Java) 開発キット ( ezplus Emulator version 1.0 ) 付属の KJX メーカ ( KJXArchiver.jar )
Softbank : S!アプリ
プリベリファイヤ
S! appli Emulator for JSCL 1.3.2 Ver.1.0.1 付属のプリベリファイヤ ( preverify.exe )
ライブラリ
S! appli Emulator for JSCL 1.3.2 Ver.1.0.1 付属のライブラリ ( stubclasses.zip )
Softbank : S!アプリ ( MIDP 2.0 )
プリベリファイヤ
J2ME Wireless Toolkit version 1.0.4_01 for Windows 付属のプリベリファイヤ ( preverify.exe )
ライブラリ
MEXA Emulator Version 1.1.0 付属のライブラリ ( stubclasses.zip )
Motorola Java
プリベリファイヤ
Motorola SDK v4.3 for J2ME 付属のプリベリファイヤ ( preverify.exe )
ライブラリ
Motorola SDK v4.3 for J2ME 付属のライブラリ ( javaextensions.jar, stubclasses.zip )
Nokia Java
プリベリファイヤ
Nokia Developer's Suite 2.2 for J2ME 付属のプリベリファイヤ ( preverify.exe )
ライブラリ
Nokia Developer's Suite 2.2 for J2ME 付属のライブラリ ( classes.zip )
Samsung Java
プリベリファイヤ
J2ME Wireless Toolkit version 1.0.4_01 for Windows 付属のプリベリファイヤ ( preverify.exe )
ライブラリ
Samsung JSDK 付属のライブラリ ( SamsungApi.jar )
KDDI OpenAppli Java
プリベリファイヤ
Java(TM) Wireless Toolkit version 2.5 for CLDC 付属のプリベリファイヤ ( preverify.exe )
ライブラリ
Java(TM) Wireless Toolkit version 2.5 for CLDC 付属のライブラリ ( *.jar )
2.3 サポートされない環境
J2ME Wireless Toolkit version 1.0.1 に付属のプリベリファイヤはサポートしていません。
2.4 携帯 Java 開発環境のダウンロードサイト
J2SE
J2SE 1.3.1 / J2SE 1.4.2 / J2SE 5.0
Archive: Java[tm] Technology Products Download
Eclipse
http://www.eclipse.org/downloads/index.php
携帯 Java 開発キット
NTT DoCoMo iAppli Development Kit :
http://www.nttdocomo.co.jp/service/imode/make/content/iappli/
KDDI EZアプリ(Java) Development Kit :
http://www.au.kddi.com/ezfactory/tec/spec/ezplus_kit.html
Softbank S! Appli Development Kit :
http://developers.softbankmobile.co.jp/dp/tool_dl/java/tool.php
J2ME Wireless Toolkit 2.2 :
http://java.sun.com/products/sjwtoolkit/ja_download-2_2.html
Java(TM) Wireless Toolkit version 2.5 :
http://java.sun.com/products/sjwtoolkit/download-2_5.html
3 インストール
インストーラのアイコンをダブルクリックしてインストールします。
4 GUI によるアプリ圧縮
起動方法
以下の何れかの方法で SophiaCompress( Java ) を起動します。
- SophiaCompress(Java) OASIS のアイコンをダブルクリック
- Windows の[スタート]メニューから選択
- インストールしたフォルダ内の scompress.jar をダブルクリック
SophiaCompress(Java) OASIS のメイン画面 ( 起動後の画面 )
4.1 メニュー
[ファイル]
- [環境設定...] : [環境設定ダイアログ]を開きます。
- [ライセンス更新] : 新しいライセンスファイルを選択して更新します。
- [終了] : SophiaCompress(Java) OASIS を終了します。
[ヘルプ]
- [ヘルプメッセージ on / off] : [ヘルプパネル]の表示/非表示を選択します。
- [ライセンスファイル情報...] : ライセンス情報を表示します。
- [SCJ OASIS について...] : SophiaCompress(Java) OASIS の情報を表示します。
4.2 環境設定ダイアログ
4.2.1 Java 設定:
[Java SDK] |
[Java SDK] がインストールされているフォルダのパス (JAVA_HOME) を設定します。
たとえば、C:\j2sdk1.4.2_08\bin\java.exe のように使用する Java SDK の java.exe を選択することで設定できます。
サポートされる Java SDK のバージョンは 1.3.1 または 1.4.2 です。
2.1 SophiaCompress(Java) OASIS の動作環境
[アーカイバ] |
アプリを JAR 圧縮する[アーカイバ]を [JAR/7-ZIP/kzip/other ZIP] の中から選択します。
1. [JAR]
Java SDK の中にある bin/jar.exe を使います。( 通常はこれを選択します )
2. [7-ZIP]
3. [kzip]
4. [other ZIP]
ZIP 圧縮ツールの [ZIP パス]と[ZIP パラメータ]を指定します。 引数の指定では、 %1 は入力フォルダ名、%2 は出力ファイル名です。
※ [7-ZIP]、[kzip] を選択した場合、以下の [ZIP パラメータ]がデフォルト値として設定されます。
ZIP 圧縮ツール: | [7-ZIP] (http://sevenzip.sourceforge.jp/) |
[ZIP パス]: | 7z.exe |
[ZIP パラメータ]: | a -tzip -mx=9 %2 %1 |
ZIP 圧縮ツール: | [kzip] (http://advsys.net/ken/utils.htm) |
[ZIP パス]: | kzip.exe |
[ZIP パラメータ]: | /r %2 * |
4.2.2 プロファイル設定:
※ [プロファイル] : [プロファイル]のチェックを外すと、メイン画面の[プロファイル一覧]に表示されません。
[プリベリファイヤ] |
[外部]を選択すると、[プリベリファイヤパス]で指定するプリベリファイヤを使います。 [内蔵]を選択すると、SophiaCompress(Java) OASIS の独自プリベリファイヤが使われます。
[プリベリファイヤパス] |
[プリベリファイヤ]を[外部]で選択した時、携帯 Java 開発キットに付属のプリベリファイヤのパスを設定します。
[プロファイル別ライブラリ] |
アプリが参照する全てのライブラリの設定
[追加]ボタン
[プロファイル別ライブラリ]にファイルを追加します。
[削除]ボタン
[プロファイル別ライブラリ]のファイルを削除します。
※携帯 Java 開発キットのライブラリは /lib フォルダにあります。
注意 : NTT DoCoMo Star / DoJa の /lib フォルダにある dbgclasses.zip はデバッグ用ライブラリなので指定しないでください。
EZ アプリ
[KJX ファイル作成] |
[KJX ファイル作成]をオンにし、[KJX メーカ]を設定すると、KJX ファイルが作成されます。
[CRC 情報追加] |
[CRC 情報追加]をオンにし[CRC メーカ]を設定すると、KJX ファイルに CRC 情報が追加されます。
MIDP
OpenAppli
[エンコーディング] |
JAD ファイルのデフォルトの[エンコーディング]は ASCII です。 リストから選択、 或いは[エンコーディング]の正準名を設定することで他の[エンコーディング]も利用可能です。ただし、OpenAppli の JAD ファイルは必ず UTF-8 で記載される必要がありますので、[エンコーディング]は UTF-8 だけとなっています。
4.2.3 圧縮オプション:
※1. [圧縮後メインクラス名]を設定するには、 [クラス名短縮]をチェックし名前を設定して[変更]ボタンを押します。
※2. [クラス融合]や [StackMap の最適化( 新規クラス作成 )]のオプションをオンにすると、圧縮後のアプリはメモリの使用量が増加します。 実行時に OutOfMemoryError 等でアプリが異常終了する場合は、[クラス融合レベル]を下げる、もしくはこれらのオプションをオフにします。
4.3 アプリ圧縮:
[選択]ボタンを押して、フォルダを選択すると、フォルダ内のアプリが表示されます。 JAM / JAD ファイルは JAR ファイルと同じ名前で同じフォルダに置きます。ドラッグアンドドロップによる操作も可能です。
注意 : NTT DoCoMo Star プロファイルの『フル+ミニアプリ』や『ミニ+フルアプリ』の JAR ファイルはサポートされていません。 『フルアプリ』や『ミニアプリ』の JAR ファイルを選択してください。
左下の[コンボボックス]から、圧縮するアプリのプロファイルを選択します。
[圧縮]ボタンを押すと圧縮を開始します。圧縮終了後、[ログ表示]ボタンを押すと、詳細なログ情報が表示されます。
[圧縮]ボタン
圧縮を開始します。圧縮終了後、[ログ表示]ボタンを押すと、詳細なログ情報が表示されます。
[状況] : 圧縮前、圧縮成功、圧縮エラーなどの状況
: 圧縮に成功した。
: 圧縮は終了したがプリベリファイ中にエラーが発生した。
: 圧縮中にエラーが発生した。
[No] : 圧縮順序
[JAR] : JAR ファイル名
[JAM] / [JAD] : JAM / JAD ファイルの存在の有無
[入力] : 入力された JAR ファイルのサイズ
[出力] : 出力された JAR ファイルのサイズ
[%] : 圧縮率
4.4 ヘルプパネル
メニューからヘルプメッセージをオンにすることで、画面下部にヘルプパネルを表示することができます。 ヘルプパネルではマウスカーソル上のコンポーネントの説明を表示します。
5 CUI によるアプリ圧縮
5.1 起動コマンド
起動コマンドの形式 :
java -jar scompress.jar -profile_name input.adf input.jar [-o output.dir] [-java javaPath] [-jar JAR/7ZIP/kzip/ZIP] [-7ZIP path] [-kzip path] [-zip ZIP] [-zip_command "..."] [-pvf preverifier] [-kjx kjxmaker] [-crc crcadder] [-encoding encoding_name] [-icc] [-cp classpath;...] [-f] [-usepvf SDK/SCJ] [-mainclass MAINCLASS] [-op_???? on/off]
注意 : NTT DoCoMo Star プロファイルの『フル+ミニアプリ』や『ミニ+フルアプリ』の JAR ファイルはサポートされていません。 『フルアプリ』や『ミニアプリ』の JAR ファイルを選択してください。
■-profile_name オプション ( 必須 ) :
-docomo | input.adf は i アプリの JAM ファイル |
-ezplus | input.adf は EZ アプリ(Java) の JAD ファイル |
-softbank / -vodafone | input.adf は S! アプリの JAD ファイル |
-willcom | input.adf は WILLCOM 用アプリの JAD ファイル |
-motorola | input.adf は Motorola 用アプリの JAD ファイル |
-nokia | input.adf は Nokia 用アプリの JAD ファイル |
-samsung | input.adf は Samsung 用アプリの JAD ファイル |
-midp | input.adf は MIDP アプリの JAD ファイル |
-openappli | input.adf は MIDP アプリの JAD ファイル |
■その他のパラメーター :
SophiaCompress(Java) OASIS GUI版を使った時に生成される環境設定ファイル によって、自動的に処理されます。個別に設定することも可能です。
-o | 出力フォルダ |
-java | Java SDK のパス |
-jar JAR/7ZIP/kzip/ZIP | JAR 圧縮ツール : JAR / 7ZIP / kzip / ZIPの中から選択 |
-7ZIP path | 7-ZIP パス |
-kzip path | kzip パス |
-zip ZIP | ZIP 圧縮ツールのパス |
-zip_command "..." | %1 は入力フォルダ名、 %2 は出力ファイル名として、ZIP 圧縮するコマンド |
-usepvf SDK/SCJ | プリベリファイヤの種類 : SDK ( 外部 ) もしくは SCJ ( 内部 ) |
-pvf | プリベリファイヤのパス |
-kjx | KJX メーカのパス ( -ezplus オプションによる圧縮時 ) |
-crc | CRC メーカのパス ( -ezplus オプションによる圧縮時 ) |
-encoding | JAD ファイルのエンコーディング ( -midp オプションによる圧縮時 ) |
-icc | 環境設定ファイルやこのコマンド以前に指定されたクラスパスの無視 |
-cp | アプリが参照するライブラリ ( ※ 2 つ以上のライブラリを設定するときは、パスの間をセミコロン ";" で区切ります) |
-f | 強制モード : ファイルの上書き等の確認無し |
-mainclass | 圧縮後のメインクラス名 |
-op_???? on/off | 圧縮オプション機能の on / off 設定 ( 環境設定ファイル 環境設定ファイルがない場合のデフォルトは on ) 詳細情報 : 8 圧縮機能 |
-op_unite | クラス融合 | -op_unite_abstract | 抽象クラス融合 |
-op_unite_level [1-10] | クラス融合レベル指定 ( 1 から 10 までの整数 ) |
-op_nop | nop の削除 |
-op_deadcode | 未使用コードの削除 |
-op_exception | 未使用 try - catch ブロックの削除 |
-op_goto | goto 命令の削除と書き換え |
-op_print | System.out.print[ln] の削除 | -op_stack | 未使用スタック命令の削除 |
-op_inline | メソッドのインライン展開 |
-op_array | クラス変数の配列化 |
-op_interface | 不要インターフェースの削除 |
-op_class | 未使用クラスの削除 |
-op_method | 未使用メソッドの削除 |
-op_classrename | クラス名短縮 |
-op_share | 名前共有 | -op_share_field | 名前共有 - フィールド名共有(強制) | -op_share_method | 名前共有 - メソッド名共有(強制) |
-op_sort_cp | コンスタントプールのソート |
-op_access_flag | アクセスフラグの変更 |
-op_return_value | 未使用返値の削除 |
-op_basic_block | Basic Block の共有 |
-op_switch | switch 文を if 文に変更 |
-op_stackmap | StackMap の最適化 |
-op_share_method | メソッド共有 |
-op_synchronized | synchronized メソッド作成 | -op_init | synchronized 未使用初期化命令の削除 | -op_string | synchronized 文字列最適化 | -op_method_declare | synchronized メソッド定義の最適化 | -op_class_vars_to_static | synchronized インスタンス変数のクラス変数化 |
-op_stackmap_new_class | StackMap の最適化(新規クラス作成) |
-op_gc | gc() の削除 |
-op_jdk1_4 | JDK 1.4(Java 2 SDK 1.4.2) のサポート |
■SophiaCompress(Java) OASIS のバージョン :
-version | SophiaCompress(Java) OASIS のバージョンを表示 |
※ -version だけを指定します。
5.2 コマンドの使用例
使用例 1 : 環境設定ファイルの設定で圧縮する場合
■ i アプリ
java -jar scompress.jar -docomo hoge.jam hoge.jar
■ EZ アプリ(Java)
java -jar scompress.jar -ezplus hoge.jad hoge.jar
■ S! アプリ
java -jar scompress.jar -softbank hoge.jad hoge.jar
■ OpenAppli
java -jar scompress.jar -openappli hoge.jad hoge.jar
使用例 2 : mylib.jar というライブラリだけを使う S! アプリを圧縮する場合
■ S! アプリ
java -jar scompress.jar -icc -cp mylib.jar -softbank hoge.jad hoge.jar
使用例 3 : 環境設定ファイルに CRC メーカが設定されているけれども、 CRC を付加したくない場合
■ EZ アプリ(Java)
java -jar scompress.jar -crc "" -ezplus hoge.jad hoge.jar
※ CRC メーカとして空文字を指定しています。
5.3 環境設定ファイル
環境設定ファイルは、最初に SophiaCompress(Java) OASIS GUI 版を起動した時に、scompress.jar と同じフォルダに自動的に作成される、拡張子が cfg であるテキストファイルです。
General.cfg: Java と GUI の設定
SHOW_BRIEF_HELP = true JAVA_SDK_FOLDER = C:\jdk1.3.1_13 JAR_ARCHIVER = JAR 7-ZIP_FOLDER =C:\Program Files\7-Zip\7z.exe KZIP_FOLDER =C:\Program Files\kzip.exe ZIP_FOLDER = C:\Program Files\7-Zip\7z.exe ZIP_PARAMETERS = a -tzip -mx=9 %2 %1 START_PROFILE = DoCoMo LAST_TARGET = INPUT_PATH =
■パラメーターの解説
- SHOW_BRIEF_HELP ( GUI 版で内部的に使用 )
- true にすると、ウインドウ下部にヘルプメッセージが表示
- JAVA_SDK_FOLDER
- Java SDK のパス
- JAR_ARCHIVER
- JAR アーカイバの指定 : JAR は Java SDK 付属の jar.exe、 7ZIP は 7-ZIP、 kzip は kzip、ZIPは そのほかの ZIP 圧縮ツール
- 7-ZIP_FOLDER
- 7-ZIP パス
- KZIP_FOLDER
- kzip パス
- ZIP_FOLDER
- ZIP パス
- ZIP_PARAMETERS
- %1 は入力フォルダ名、 %2 は出力ファイル名として、ZIP 圧縮するコマンド
- START_PROFILE ( GUI 版で内部的に使用 )
- 起動時のプロファイル名
- LAST_TARGET ( GUI 版で内部的に使用 )
- 前回に選択したファイルのパス
- INPUT_PATH ( GUI 版で内部的に使用 )
- 前回に選択したアプリのパス
Profiles.cfg: 各プロファイルの設定
DoCoMo_ENABLED = true DoCoMo_SDKPREVERIFIER = true DoCoMo_PREVERIFIER_FILE_PATH = C:\iDKDoJa3.5\bin\preverify.exe DoCoMo_LIBRARIES = C:\iDKDoJa3.5\lib\doja_classes.zip;C:\iDKDoJa3.5\lib\classes.zip S!Appli_ENABLED = true S!Appli_SDKPREVERIFIER = true S!Appli_PREVERIFIER_FILE_PATH = C:\S_appli_SDK_132\bin\preverify.exe S!Appli_LIBRARIES = C:\S_appli_SDK_132\lib\stubclasses.zip Willcom_ENABLED = true Willcom_SDKPREVERIFIER = true Willcom_PREVERIFIER_FILE_PATH = Willcom_LIBRARIES = EZAppli_ENABLED = true EZAppli_SDKPREVERIFIER = true EZAppli_PREVERIFIER_FILE_PATH = C:\WTK104\bin\preverify.exe EZAppli_LIBRARIES = C:\WTK104\lib\midpapi.zip;C:\EZAppli_SDK\lib\kddip3.jar EZAppli_CREATE_KJX_FILE = true EZAppli_ADD_CRC = false EZAppli_KJX_MAKER_PATH = C:\EZAppli_SDK\bin\KJXArchiver.jar EZAppli_CRC_MAKER_PATH = Nokia_ENABLED = true Nokia_SDKPREVERIFIER = true Nokia_PREVERIFIER_FILE_PATH = C:\Nokia\Devices \Series_60_MIDP_Concept_SDK_Beta_0_3_1_Nokia_edition\bin\preverify.exe Nokia_LIBRARIES = C:\Nokia\Devices \Series_60_MIDP_Concept_SDK_Beta_0_3_1_Nokia_edition\lib\classes.zip Motorola_ENABLED = true Motorola_SDKPREVERIFIER = true Motorola_PREVERIFIER_FILE_PATH = C:\Program Files\Motorola\SDK v4.3 for J2ME \EmulatorA.1\bin\preverify.exe Motorola_LIBRARIES = C:\Program Files\Motorola\SDK v4.3 for J2ME\EmulatorA.1\lib \javaextensions.jar;C:\Program Files\Motorola\SDK v4.3 for J2ME\EmulatorA.1 \lib\stubclasses.zip Samsung_ENABLED = true Samsung_SDKPREVERIFIER = true Samsung_PREVERIFIER_FILE_PATH = C:\WTK104\bin\preverify.exe Samsung_LIBRARIES = C:\Program Files\Samsung\SJSDKv2.0\lib\SamsungApi.jar MIDP_ENABLED = true MIDP_SDKPREVERIFIER = true MIDP_PREVERIFIER_FILE_PATH = C:\WTK104\bin\preverify.exe MIDP_LIBRARIES = C:\WTK104\lib\midpapi.zip MIDP_ENCODING = UTF8 OpenAppli_ENABLED = true OpenAppli_SDKPREVERIFIER = true OpenAppli_PREVERIFIER_FILE_PATH = C:\WTK25\bin\preverify.exe OpenAppli_LIBRARIES = C:\WTK25\lib\cldcapi10.jar;C:\WTK25\lib\cldcapi11.jar;C:\WTK25\lib\j2me-ws.jar;C:\WTK25\lib\j2me-xmlrpc.jar;C:\WTK25\lib\jsr082.jar;C:\WTK25\lib\jsr179.jar;C:\WTK25\lib\jsr180.jar;C:\WTK25\lib\jsr184.jar;C:\WTK25\lib\jsr211.jar;C:\WTK25\lib\jsr226.jar;C:\WTK25\lib\jsr229.jar;C:\WTK25\lib\jsr234.jar;C:\WTK25\lib\jsr238.jar;C:\WTK25\lib\jsr239.jar;C:\WTK25\lib\jsr75.jar;C:\WTK25\lib\midpapi10.jar;C:\WTK25\lib\midpapi20.jar;C:\WTK25\lib\midpapi21.jar;C:\WTK25\lib\mmapi.jar;C:\WTK25\lib\satsa-apu.jar;C:\WTK25\lib\satsa-crypto.jar;C:\WTK25\lib\satsa-jcrmi.jar;C:\WTK25lib\satsa-pki.jar;C:\WTK25\lib\wma11.jar;C:\WTK25\lib\wma20.jar OpenAppli_ENCODING = UTF8
■パラメーターの解説
- ENABLED ( GUI 版で内部的に使用 )
- メイン画面のプロファイル一覧から選択可能であるかどうか
- SDKPREVERIFIER
- true : PREVERIFIER_FILE_PATH で設定されたプリベリファイヤを使用 / false : SophiaCompress(Java) OASIS の独自プリベリファイヤを使用します。
- PREVERIFIER_FILE_PATH
- プリベリファイヤのパス
- LIBRARIES
- ライブラリのパス ( 2 つ以上のライブラリを設定するには、パスの間をセミコロン ";" で区切ります)
- CREATE_KJX_FILE
- KJX ファイルの作成 : true / false
- ADD_CRC
- KJX ファイルへの CRC 情報の付加 : true / false
- KJX_MAKER_PATH
- KJX メーカのパス
- CRC_MAKER_PATH
- CRC メーカのパス
- ENCODING
- エンコーディング
Compression.cfg: 設定例
CLASS_INTEGRATION_ABSTRACT = true INTEGRATION_RATIO = 10 NEW_CLASS_NAME = SHARE_FIELD_NAMES_FORCELY = true SHARE_METHOD_NAMES_FORCELY = true CLASS_INTEGRATION = true SHARE_CLASS_NAMES = true SHARE_NAMES = true JDK_OVER_1_4 = true UNUSED_CLASSES = true UNUSED_INTERFACES = false UNUSED_METHODS = true UNUSED_CODE = true UNUSED_EXCEPTIONAL_TABLE = true GOTO_JUMPS = true UNUSED_STACK_OPERATION = true INLINE_METHOD_DEPLOYMENT = true CLASS_VARIABLES_INTO_ARRAY = true SORT_CP = true ACCESS_FLAGS = true UNUSED_RETURN_VALUE = true DELETE_SYSTEM_OUT_PRINTLN = true SHARE_BASIC_BLOCK = true SWITCH_TO_IF = true OPTIMIZE_STACK_MAP = true SHARE_METHODS = true MAKE_SYNCHRONIZED_METHOD = true UNUSED_INITIALIZE = true OPTIMIZE_STRING = true OPTIMIZE_METHOD_DECLARATION = true CLASS_VARIABLES_TO_STATIC = true DELETE_NOP = true OPTIMIZE_STACKMAP_NEW_CLASS = false DELETE_GC() = false
■パラメーターの解説
- CLASS_INTEGRATION_ABSTRACT
- 抽象クラス融合
- INTEGRATION_RATIO
- クラス融合のレベル : 1 〜 10
- NEW_CLASS_NAME
- クラス名短縮時の、メインクラス名の指定
- SHARE_FIELD_NAMES_FORCELY
- フィールド名共有(強制)
- SHARE_METHOD_NAMES_FORCELY
- メソッド名共有(強制)
- CLASS_INTEGRATION
- クラス融合
- SHARE_CLASS_NAMES
- クラス名短縮・共有
- SHARE_NAMES
- 名前共有
- JDK_OVER_1_4
- JDK 1.4(Java 2 SDK 1.4.2) でコンパイルされたクラスファイルの圧縮に対応
- UNUSED_CLASSES
- 未使用クラスの削除
- UNUSED_INTERFACES
- インターフェースの削除
- UNUSED_METHODS
- 未使用メソッドの削除
- UNUSED_CODE
- 未使用コードの削除
- UNUSED_EXCEPTIONAL_TABLE
- 未使用 'try-catch' ブロックの削除
- GOTO_JUMPS
- goto 命令の削除と書き換え
- UNUSED_STACK_OPERATION
- 未使用スタック命令の削除
- INLINE_METHOD_DEPLOYMENT
- メソッドのインライン展開
- CLASS_VARIABLES_INTO_ARRAY
- クラス変数の配列化
- SORT_CP
- CP エントリのソート
- ACCESS_FLAGS
- アクセスフラグの変更
- UNUSED_RETURN_VALUE
- 未使用返値の削除
- DELETE_SYSTEM_OUT_PRINTLN
- System.out.print[ln] の削除
- SHARE_BASIC_BLOCK
- Basic Block の共有
- SWITCH_TO_IF
- switch 文を if 文に変更
- OPTIMIZE_STACK_MAP
- StackMap の最適化
- SHARE_METHODS
- メソッド共有
- MAKE_SYNCHRONIZED_METHOD
- synchronized メソッド作成
- UNUSED_INITIALIZE
- synchronized 未使用初期化命令の削除
- OPTIMIZE_STRING
- synchronized 文字列最適化
- OPTIMIZE_METHOD_DECLARATION
- synchronized メソッド定義の最適化
- CLASS_VARIABLES_TO_STATIC
- synchronized インスタンス変数のクラス変数化
- DELETE_NOP
- NOP 命令の削除
- OPTIMIZE_STACKMAP_NEW_CLASS
- StackMap の最適化(新規クラス作成)
- DELETE_GC()
- gc() の削除
※ 圧縮オプションの有効 / 無効は true / false で設定します。
※ cfg ファイルについて :
CUI の起動時、環境設定ファイルはカレントフォルダの cfg ファイルを読み込みます。 カレントフォルダにない場合は、scompress.jar があるフォルダから cfg ファイルを読み込みます。 これらのフォルダにない場合、 cfg ファイルを読み込みません。
6 Eclipse でのアプリ圧縮
6.1 Eclipse プラグイン のインストール
SophiaCompress(Java) OASIS のインストーラで Eclipse プラグイン をインストールします。
※ com.s_cradle.sophiacompress.eclipse.plugin_1.0.0.jar ファイルを Eclipse のインストールフォルダ内の plugins フォルダにコピーしてインストールすることも可能です。
6.2 設定
Eclipse のメニュー [Window] - [Preferences...] を選択すると、プラグインを設定できます。
[SCJ Path] には、SophiaCompress(Java) OASIS をインストールしたフォルダの scompress/scompress.jar を設定します。
[Profile] には、圧縮するアプリのプロファイルを選択します。
圧縮前に、必ず SophiaCompress(Java) OASIS の環境設定をしてください。
6.3 圧縮
Eclipse の [Package Explorer] ウインドウで、プロジェクトを選択して右クリックします。
メニューの [Compress] を選択すると、プロジェクトにある bin フォルダ又は deployed フォルダにある JAR ファイルと ADF ファイルの圧縮を開始します。
7 エラーメッセージと使用上の注意
7.1 実行時のエラーメッセージ
7.1.1 java.lang.OutOfMemoryError
- 原因:
- Java のヒープメモリが足りないため圧縮に失敗しました。
- 対策:
- 起動オプション -Xmx<size> により、ヒープサイズを増やして SophiaCompress(Java) OASIS を再起動します。 <size> にはヒープサイズを指定します。
java -jar -Xmx<size> scompress.jar
詳細情報 : ヒープサイズを増やして SophiaCompress(Java) OASIS を再起動する方法
使用例:
java -jar -Xmx100m scompress.jar
※ 起動オプションは -Xmx<100m> ではなく、-Xmx100m です。
7.1.2 java.lang.StackOverflowError
- 原因:
- Java のスタックのメモリが足りないため圧縮に失敗しました。
- 対策:
- 起動オプション -Xss<size> により、スタックサイズを増やして SophiaCompress(Java) OASIS を再起動します。 <size> にはスタックサイズを指定します。
java -jar -Xss<size> scompress.jar
使用例:
java -jar -Xss50m scompress.jar
※ 起動オプションは -Xss<50m> ではなく、-Xss50m です。
7.2 使用上の注意
7.2.1 JAR ファイルの絶対パス
JAR ファイルや出力指定フォルダなどの絶対パスに "ム"などの 2 バイト文字が含む場合、 SophiaCompress(Java) OASIS が正常に動作しないことが確認されています。
例
× c:\ゲーム\tetris.jar
○ c:\game\tetris.jar
7.2.2 Class.forName メソッド
Class.forName メソッドを使うアプリを圧縮した場合、正常に動作しない場合があります。
例
- クラス内部で文字列を合成してクラス名を作り出し、そのクラスを使用する場合
- 画面に表示する文字列としてクラス名と同じものがある場合
7.2.3 OutOfMemoryError で異常終了する、或いは動作が遅くなった場合
原因
クラス融合機能や StackMap 圧縮機能(新規クラス作成)を使うと、圧縮後のメモリ使用量が増加するので、 OutOfMemoryError で異常終了したり、、頻繁にガーベッジコレクションが実行されてアプリの動作が遅くなることがあります。
対策
クラス融合レベルを下げるか、クラス融合機能や StackMap 圧縮機能のチェックを外します。
7.2.4 リソースファイルにアクセスできなくなった場合
原因
クラス融合機能 や クラス名短縮機能 を使うと、クラスの絶対パスが変わります。 リソースファイルに相対パスでアクセスしている場合、圧縮後リソースファイルへのアクセスに失敗します。
対策
リソースファイルへのアクセスは絶対パスを使います。
例
package application.text 内のクラスにて
× InputStream inputStream = getClass().getResourceAsStream("input.txt")
○ InputStream inputStream = getClass().getResourceAsStream("/application/text/input.txt")
7.2.5 JAM ファイルの絵文字が文字化けする場合
原因
SophiaCompress(Java) OASIS が SJIS に絵文字を追加した SJIS_i というエンコーディングに対応していないためです。
対策
SJIS_i エンコーディングを利用可能にするために、Java SDK の i18n.jar の変更します。
■ i18n.jar の変更手順
- i18n.jar をバックアップします。i18n.jar は次のどちらかのパスにあります。
- %JAVA_HOME%\lib\i18n.jar
- %JAVA_HOME%\jre\lib\i18n.jar
- i18n.jar を解凍します。解凍後のフォルダ名は i18n とします。
- このフォルダの内容を%IDK_HOME%\lib\i18nの内容と置き換えます。
- i18n フォルダを圧縮して、 i18n.jar を作ります。
- i18n.jar を元のフォルダに置きます。
※ %JAVA_HOME% : Java をインストールしたフォルダ / %IDK_HOME% : i アプリ開発キットをインストールしたフォルダ
7.2.6 外部プログラムの呼び出し
プリベリファイヤ
preverifier.exe [-classpath "classpath"] -d output input
KJX メーカ
java -jar KJXMaker -c inputJad inputJar outputKjx ( JAR ファイルの場合 )
KJXMaker -c inputJad inputJar outputKjx ( EXE ファイルの場合 )
CRC メーカ
java -jar CRCMaker targetKjx (JAR ファイルの場合)
CRCMaker targetKjx (EXE ファイルの場合)
7.2.7 GUI 画面が小さすぎる場合
GUI 画面サイズが小さすぎて利用できない場合、-resize を指定して SophiaCompress(Java) OASIS を再起動します。
java -jar scompress.jar -resize
例
8 圧縮機能
8.1 データの最適化
実行に関係のない属性の削除
不要な Synthetic 属性、InnerClass 属性、Deprecated 属性、 プリベリファイ時に付加される StackMap 属性を削除します。
未使用 CP ( コンスタントプール ) の削除
名前の共有・短縮などにより、未使用となった CP エントリ ( プログラム中の定数 ) を削除します。
未使用フィールドの削除
参照されないフィールドを削除します。
未使用メソッドの削除
呼び出されないメソッドを削除します。
未使用クラスの削除
参照されないクラスを削除します。
インターフェースの削除
必要のないインターフェースを削除します。
未使用返値の削除
メソッドの返値が使われていない場合、メソッドを void 型にします。
未使用初期化命令の削除
必要のないクラス変数や配列の初期化命令を削除します。
フィールド名の共有・短縮
クラスのフィールド名をデータ領域と共有、もしくは短縮します。
メソッド名の共有・短縮
クラスのメソッド名をデータ領域と共有、もしくは短縮します。
CP エントリのソート
ZIP 圧縮の効率を向上させるため、CP エントリをソートします。
クラス変数の配列化
同じ型のクラス変数を、一つの配列とすることで、クラス変数の数を減らします。
クラス名の共有・短縮
クラス名を共有・短縮します。
8.2 インストラクションの最適化
nop の削除
nop 命令を削除します。
デッドコードの削除
実行されないコードを削除します。
未使用 try - catch ブロックの削除
キャッチすることのない例外についての情報を削除します。
goto ジャンプの削除と書き換え
次の命令へジャンプする命令など、不要な goto 命令を削除します。 また、goto 命令へ飛ぶ goto について、最終的な命令にジャンプする書き換えも行います。
System.out.print[ln] の削除
System.out.print もしくは System.out.println の呼び出しを削除します。
未使用スタック命令の削除
スタックに値を載せて、参照せずに取り出すスタック操作のコードを削除します。
メソッドのインライン展開
小さなメソッド、一ヶ所からしか呼び出されないメソッドを、呼び出し元に展開し、本体のメソッドを削除します。
アクセスフラグの変更
ZIP 圧縮の効率を向上させるため、クラス、メソッド、フィールドのアクセスフラグを変更します。
switch 文を if 文に変更
分岐が 2 つ以下の switch 文を if 文に変更します。
メソッド共有
同じメソッドを共有します。
synchronized メソッド作成
synchronized ブロックを独立した synchronized メソッドにします。
文字列最適化
プログラム中で動的に作成される文字列が計算可能な場合に、計算後の文字列定数と置き換えます。
メソッド定義の最適化
インスタンスメソッドのうち、可能なものをクラスメソッドに変換します。
インスタンス変数のクラス変数化
メインクラスのインスタンス変数をクラス変数にします。
gc() の削除
System.gc()、 Runtime.getRuntime().gc() などの gc() メソッド呼び出しを削除します。
JDK1.4 のサポート
Java SDK 1.4 でコンパイルされたアプリを圧縮する時に指定します。
8.3 クラス融合
2 つ以上のクラスを可能な限り 1 つのクラスにまとめます。
8.4 StackMap の最適化
StackMap の最適化
プリベリファイ時に付加される StackMap 情報のサイズを小さくします。
StackMap の最適化 ( 新規クラス作成 )
プリベリファイ時に付加される StackMap 情報のサイズを小さくするために、新規クラスを作成します。
Basic Block の共有
ジャンプを含まない Basic Block 単位でインストラクションを共有します。
9 サポート
製品へのご意見がございましたら、お問合せからお願いいたします。
問題が発生した場合、お手数ですが、圧縮ログ、エラーメッセージ、画面キャプチャーなどできるだけ詳細な情報のご提供をお願い申し上げます。
バージョンアップ情報
SophiaCompress(Java) OASIS リリースノートをご覧ください。
10 用語集
ADF ファイル
ADF ファイルは名前やサイズなど、アプリの情報を保持するファイルです。 Star / DoJa では JAM ファイル、 MIDP では JAD ファイルと呼ばれます。
プリベリファイ
プリベリファイとはアプリが携帯電話上で安全に動作するかどうか検証する作業のことです。通常、コンパイルと同時に行われます。
プリベリファイヤ
プリベリファイヤはプリベリファイを実行するプログラムです。通常、携帯 Java 開発キットに付属しています。
ライブラリ
携帯 Java 開発キットに付属するライブラリを含め、アプリが参照するすべてのライブラリのことです。具体的には、コマンドラインからコンパイルするときにコンパイラに -classpath オプションで指定する JAR / ZIP ファイルです。
プロファイル
Star / DoJa や MIDP などの携帯 Java のプロファイルのことです。
StackMap
StackMap は、プリベリファイによって追加される、クラスファイル内インストラクションの属性名のことです。
Java および Java に関連する商標は、米国およびその他の国における米国 Sun Microsystems, Inc. の商標または登録商標です。記載された社名および製品名は各社の商標または登録商標です。
日本国京都府京都市左京区田中関田町2番地7
株式会社ソフィア・クレイドル
/
Sophia Cradle Incorporated