ホーム > 製品情報 > SophiaCompress(Java) OASIS > ユーザーズマニュアル

SophiaCompress(Java) OASIS ユーザーズマニュアル

目次

  1. SophiaCompress(Java) OASIS とは
  2. 動作環境
    1. システム環境
    2. プロファイル
    3. サポートされない環境
    4. 携帯 Java 開発環境のダウンロードサイト
  3. インストール
  4. GUI によるアプリ圧縮
    1. メニュー
    2. 環境設定ダイアログ
      1. Java 設定:
      2. プロファイル設定:
      3. 圧縮オプション:
    3. アプリ圧縮:
    4. ヘルプパネル
  5. CUI による圧縮
    1. 起動コマンド
    2. コマンドの使用例
    3. 環境設定ファイル
  6. Eclipse でのアプリ圧縮
    1. Eclipse plugin のインストール
    2. 設定
    3. 圧縮
  7. エラーメッセージと使用上の注意
    1. 実行時のエラーメッセージ
      1. java.lang.OutOfMemoryError
      2. java.lang.StackOverflowError
    2. 使用上の注意
      1. JAR ファイルの絶対パス
      2. Class.forName メソッド
      3. OutOfMemoryError で異常終了する、或いは動作が遅くなった場合
      4. リソースファイルにアクセスできなくなった場合
      5. JAM ファイルに絵文字が含まれる場合
      6. 外部プログラムの呼び出し
      7. GUI 画面が小さすぎる場合
  8. 圧縮機能
    1. データの最適化
    2. インストラクションの最適化
    3. クラス融合
    4. StackMap の最適化
  9. サポート
  10. 用語集

1 SophiaCompress(Java) OASIS とは

SophiaCompress(Java) OASIS は、MIDPStar / DoJa などの 携帯 Java アプリのサイズを実行形式 ( JAR ファイル形式 ) のまま最小化する圧縮ツールです。

圧縮の手順

  1. JAR ファイルの解凍
  2. 圧縮
  3. プリベリファイ
  4. パッケージング ( JAR ファイルの作成 )
  5. ADF ファイルの変更

SophiaCompress(Java) OASIS

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 ) を起動します。

  1. SophiaCompress(Java) OASIS のアイコンをダブルクリック
  2. Windows の[スタート]メニューから選択
  3. インストールしたフォルダ内の scompress.jar をダブルクリック
SophiaCompress(Java) OASIS のメイン画面 ( 起動後の画面 )

起動画面

4.1 メニュー

[ファイル]
[ヘルプ]

4.2 環境設定ダイアログ

4.2.1 Java 設定:

設定画面

[Java SDK]

[Java SDK] がインストールされているフォルダのパス (JAVA_HOME) を設定します。

たとえば、C:\j2sdk1.4.2_08\bin\java.exe のように使用する Java SDKjava.exe を選択することで設定できます。

サポートされる Java SDK のバージョンは 1.3.1 または 1.4.2 です。

[アーカイバ]

アプリを 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 アプリ

EZ アプリ

[KJX ファイル作成]

[KJX ファイル作成]をオンにし、[KJX メーカ]を設定すると、KJX ファイルが作成されます。

[CRC 情報追加]

[CRC 情報追加]をオンにし[CRC メーカ]を設定すると、KJX ファイルに CRC 情報が追加されます。


MIDP

OpenAppli

[エンコーディング]

JAD ファイルのデフォルトの[エンコーディング]ASCII です。 リストから選択、 或いは[エンコーディング]の正準名を設定することで他の[エンコーディング]も利用可能です。ただし、OpenAppliJAD ファイルは必ず UTF-8 で記載される必要がありますので、[エンコーディング]UTF-8 だけとなっています。

4.2.3 圧縮オプション:

圧縮機能の設定

※1. [圧縮後メインクラス名]を設定するには、 [クラス名短縮]をチェックし名前を設定して[変更]ボタンを押します。

※2. [クラス融合][StackMap の最適化( 新規クラス作成 )]のオプションをオンにすると、圧縮後のアプリはメモリの使用量が増加します。 実行時に OutOfMemoryError 等でアプリが異常終了する場合は、[クラス融合レベル]を下げる、もしくはこれらのオプションをオフにします。

4.3 アプリ圧縮:

Multi compression

[選択]ボタンを押して、フォルダを選択すると、フォルダ内のアプリが表示されます。 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.adfi アプリJAM ファイル
-ezplus input.adfEZ アプリ(Java)JAD ファイル
-softbank / -vodafone input.adfS! アプリJAD ファイル
-willcom input.adfWILLCOM 用アプリの JAD ファイル
-motorola input.adfMotorola 用アプリの JAD ファイル
-nokia input.adfNokia 用アプリの JAD ファイル
-samsung input.adfSamsung 用アプリの JAD ファイル
-midp input.adfMIDP アプリの JAD ファイル
-openappli input.adfMIDP アプリの 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.exe7ZIP は 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...] を選択すると、プラグインを設定できます。

Eclipse Plug-In

[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
使用例:
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 の変更手順
  1. i18n.jar をバックアップします。i18n.jar は次のどちらかのパスにあります。
    • %JAVA_HOME%\lib\i18n.jar
    • %JAVA_HOME%\jre\lib\i18n.jar
  2. i18n.jar を解凍します。解凍後のフォルダ名は i18n とします。
  3. このフォルダの内容を%IDK_HOME%\lib\i18nの内容と置き換えます。
  4. i18n フォルダを圧縮して、 i18n.jar を作ります。
  5. 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 / DoJaMIDP などの携帯 Javaプロファイルのことです。

StackMap

StackMap は、プリベリファイによって追加される、クラスファイル内インストラクションの属性名のことです。

Java および Java に関連する商標は、米国およびその他の国における米国 Sun Microsystems, Inc. の商標または登録商標です。記載された社名および製品名は各社の商標または登録商標です。