トラブルシューティング
PreEmptive Protection - DashO を使用して製品を保護する際に発生する可能性がある、いくつかの一般的な問題があります。 以下の項目にお客様の特定の問題が見つからない場合は、追加情報を記録するように DashO を構成してみてください。 DashO Gradle プラグインを使用して作業している場合は、Gradle プラグインのトラブルシューティング セクションを調べてください。
- 詳細なログまたはデバッグ ログを有効にする方法
- UI に関する問題
- エラー
- Error: Error creating output file for {some class}: While parsing {some class and method}
- Error: Method code too large!
- Error: {some number}
- Error: Class not found {some class}; super class of {some other class}
- Error: Unable to resolve common supertype for: {some class} and {some other class}
- Missing org.apache.http.impl.client.DefaultHttpClient in an Android project.
- Error: Required Method Not Found: {some class and method} call to method {some method} in [class|interface] {some other class}
- Error: Unable to add to path: {some path}: {message}
- Error: Unable to add to path: {some path}: DashO does not currently support multidex APKs.
- Error: {some class} did not match any classes in the input path.
- Error: Method {some class and method} not found.
- Error: Recursive definition at position {i} in "${expression}"
- Error: Invalid Regular Expression used in {context} : {expression} : {details}
- Error: Error reading {path to project.dox} - Illegal version number: X.Y.Z
- 警告
- Warning: A path in ${gradleInput} does not appear to contain any classes.
- Warning: File format changed. project.dox (vX.Y.Z) has been updated to vX.Y.Z. Please save the updated version.
- Warning: Duplicate class {some class} in {some path} ignored; using version from {some other path}
- Warning: Required Method Not Found: {some class and method} call to method {some method} in [class|interface] {some other class}
- Warning: The 'EnclosingMethod' attribute of class '{some class}' references '{some other class}' which was not part of the inputs, and will be retained unmodified in the obfuscated output.
詳細なログまたはデバッグ ログを有効にする方法
追加情報を記録するように DashO を構成する方法は次のとおりです。
- DashO GUI を実行している場合:[Preferences]で、Logging Level
Verbose
(またはDebug
)を使用し、Print Stack Traces
をオンにします。 - DashO コマンド ラインを実行している場合:
dashocmd
の実行時に、引数--verbose
(または--debug
)と--printStackTraces
を追加します。 - Gradle プラグインを使って DashO を実行している場合:
dashoConfig
にverbose = true
(またはdebug = true
)を追加します。 - Ant 統合を使って DashO を実行している場合:
obfuscate
タスクでverbose="true"
およびprintstacktraces="true"
を設定します。 また、output
やerror
ファイルを設定しておくと役立つことがあります。
UI に関する問題
DashO が起動しない
コマンド プロンプトから、インストール ディレクトリで java -jar DashOProGUI.jar
を実行してみてください。
それが動作する場合は、構成内の Java ランタイムを確認してください。
高 DPI およびスケーリングに関する問題
Java で実行されるデスクトップ アプリケーション(つまり DashO)は、拡大率が 100% 以上になっている高 DPI ディスプレイの Windows では、ほとんどの場合、適切に表示されません。
これらの問題は、DashO の GUI では、ツール ヒントが切り詰められる(たとえば、View the User Guide
ではなく View the User
となる)、アイコンやスプラッシュ画面イメージが小さく表示される現象として現れます。
javaw.exe
の Windows 設定を変更することにより、表示を改善できます。
- DashO の実行に使用される JDK(または JRE)の場所を特定します。
- Windows エクスプローラーで、
javaw.exe
(bin
またはjre/bin
のいずれかにあります)を探します。 javaw.exe
を右クリックして[プロパティ]を選択します。- [互換性]セクションを表示します。
- [高い DPI スケールの動作を上書きします]チェック ボックスをオンにします。
- "システム" を選択します。
- [OK]をクリックします。
DashO GUI から Android Gradle プロジェクトをビルドする
場合によっては、構成に関する問題を判断するうえで、DashO GUI を使用して Android Gradle プロジェクトを実行すると、役に立つことがあります。
ただし、DashO が必要とする値のほとんどは User Properties にあり、これらの値は DashO Gradle プラグインから渡されます。
ウィザードを実行した場合、生成されたプロジェクトのプロパティの多くには既定値が設定されています。
しかし、${gradleSupport}
には既定値がないので、GUI から DashO を実行した場合、Class Not Found の問題が発生する可能性があります。
-DSHOW_DASHO_CMD
引数を指定して Gradle ビルドを実行し、{$gradleSupport}
(またはほかのプロパティ)に渡される値を確認します。
その後、User Properties で ${gradleSupport}
(またはほかのプロパティ)の既定値を編集することができます。
メモ:
includeAsInputs
を構成している場合は、${gradleInput}
の既定値も確認してください。
エラー
Error: Error creating output file for {some class}: While parsing {some class and method}
デバッグ ログを有効にして DashO を再度実行し、そのログの情報をサポート担当者に連絡してください。
この問題を回避するには、保護対象から some class and method
を除外してみてください。
Error: Method code too large!
DashO の一部の保護技術は、メソッドの全体的なコード サイズを増大させる可能性があります。 ごくまれに、保護によってメソッドのサイズが、Java 仮想マシンがサポートするサイズを超えるまで大きくなることがあります。 デバッグ ログを有効にして DashO を再度実行し、書き込まれるクラスおよびメソッドを判断してください。 保護の対象からメソッドを除外するか、メソッドが小さくなるようコードをリファクタすることができます。
Error: {some number}
デバッグ ログを有効にして DashO を再度実行し、そのログの情報をサポート担当者に連絡してください。 その時点で操作されているクラスまたはメソッドを特定できる場合は、そのクラスまたはメソッドを保護対象から除外して、問題を回避することができます。
Error: Class not found {some class}; super class of {some other class}
DashO は、クラスの使用方法や名前の変更が可能な項目を決定するときに、スーパー クラスにアクセスして、継承されるメソッドおよびオーバーライドされるメソッドを決定する必要があります。
some class
を含んでいる jar ファイルを supporting classpath(または、そのクラスを DashO で保護する必要がある場合は入力)に追加する必要があります。
some class
が java.lang.Object
である場合は、Include JDK(JDK の導入)を構成する(または、これが Android プロジェクトである場合は、android.jar
を supporting classpath に追加する)必要があります。
some other class
が、アプリケーションで実際に使用されていると思われないクラスである場合は、Removal の構成を確認してください。
未使用のクラスを除去しないように DashO が構成されている場合は、すべての入力クラスのスーパー クラスにアクセス可能である必要があります。
メモ:Android Gradle プロジェクトである場合は、DashO GUI での実行を参照してください。
Error: Unable to resolve common supertype for: {some class} and {some other class}
このエラーは通常、some class
または some other class
が入力またはサポート クラスパスに見つからない場合に発生します。
Missing org.apache.http.impl.client.DefaultHttpClient in an Android project.
Google は Marshmallow(6.0 - SDK v23) で、android.jar
内のこのクラスの配布を停止しました。
${sdk.dir}/platforms/${sdk.target}/extras/org.apache.http.legacy.jar
をサポート クラスパスに追加してください。
Error: Required Method Not Found: {some class and method} call to method {some method} in [class|interface] {some other class}
some class and method
の実行パスを調べているときに、some method
が some other class
に見つかりませんでした。
これは、DashO 構成内の正しくないバージョンのサポート ライブラリを参照した場合に発生する可能性があります。
入力およびサポート クラスパスを確認してください。
Ignore Missing Methods をオンにすると、このエラーを警告に格下げすることができます。
Error: Unable to add to path: {some path}: {message}
これは、入力またはサポート クラスパスのエントリの読み取り時に発生するエラーです。
message
には詳細情報が含まれます。
エントリ(または、エントリによって展開される User Property 定義を確認してください)。
Error: Unable to add to path: {some path}: DashO does not currently support multidex APKs.
DashO は、処理後の Multidex APK を入力としてサポートしていませんが、Gradle ビルドに統合されている場合には Multidex APK をサポートします。 代わりに、DashO を Gradle ビルド処理に統合してください。
Error: {some class} did not match any classes in the input path.
構成されている特殊なエントリ ポイント some class
が入力内に見つかりませんでした。
クラス名に間違いがないことと、クラスが入力の一部であることを確認してください。
GUI でプロジェクトを表示すると、クラスが入力の一部であるかどうかの判断に役立つ可能性があります。
Error: Method {some class and method} not found.
構成されているエントリ ポイント some class and method
が入力内に見つかりませんでした。
クラスおよびメソッドのスペルに間違いがないことと、メソッドの署名が正しいことを確認してください。
GUI でプロジェクトを表示すると、クラスおよびメソッドが入力の一部であるかどうかの判断に役立つ可能性があります。
Error: Recursive definition at position {i} in "${expression}"
プロパティの拡張は入れ子のプロパティをサポートしています。
このエラーは、入れ子のプロパティを含んでいるプロパティを評価していて、再帰が見つかった場合に発生します。
これを解決するには、再帰的な定義を削除する必要があります。
再帰が見つかった場所は、expression
内の i
で始まるプロパティ名です。
Error: Invalid Regular Expression used in {context} : {expression} : {details}
このエラーは、無効な正規表現が見つかった場合に発生します。 メッセージには次の事項が含まれています。
context
- 構成内でexpression
が使用されている領域。expression
- エラー原因となった式。 これは、展開されたプロパティ参照からのものであった可能性があります。details
- 特定の問題に関する詳細情報。
Java 正規表現の構文を確認してください。
Error: Error reading {path to project.dox} - Illegal version number: X.Y.Z
古いバージョンの DashO で新しい DashO 構成ファイルを開こうとしています。 このファイルは DashO vX.Y.Z(以降)で開く必要があります。 新しいバージョンの DashO では、古いバージョンの構成ファイルを読み取ることができます。
警告
Warning: A path in ${gradleInput} does not appear to contain any classes.
ウィザードで構成された Gradle ベースの Android ビルドでは、DashO の入力はプロパティ gradleInput
(DashO Android Gradle プラグインから渡されます)から受け取るように構成されます。
このプロパティには(User Properties パネルで)1 つ以上のパスの既定値が設定されているため、DashO はクラスを読み込んで、GUI にクラス ツリーを作成できます。
この既定値にクラスが何も含まれていない場合、クラス ツリーは正しく作成されず、新しいチェックや規則を設定することが難しくなります。
これは、以下の理由から発生する可能性があります。
- クラスがコンパイルされていない可能性があります。
gradlew assemble
または同様のタスクを実行して、プロジェクトをコンパイルしてください。 - ウィザードがビルド バリアントに基づいて設定した
gradleInput
がビルドされていません(たとえば、gradleInput
はrelease
クラスの場所を参照しているのに、debug
しかビルドされていません)。 これは、すべてのバリアントをビルドすれば解決します。 - プロジェクトで Kotlin を使用していますが、
gradleInput
に Kotlin クラスが含まれていません。 Kotlin クラスの場所をgradleInput
に追加してください。その際、他のパスとの区切りには、プラットフォームに依存しないプロパティの拡張${path.separator}
(または、プラットフォーム依存の;
または:
)を使用します。 Kotlin クラスのパスは、通常、次のようになります。
build/tmp/kotlin-classes/[<flavorName>]<buildType>
- Android Gradle プラグインがコンパイルしたクラスを配置する場所が変更されている可能性があります(たとえば、DashO プロジェクトは、現在使用しているバージョンより古いバージョンの Android Gradle プラグインで作成されています)。
少なくとも 1 つのビルド バリアント用のクラスを含んでいるディレクトリを探し、その場所を参照するように
gradleInput
の既定値を更新する必要があります。
Android Gradle プラグインのバージョンが 3.2.0 より前である場合には、クラスのパスは通常、次のようになります。
build/intermediates/classes[/<flavorName>]/<buildType>
バージョン 3.2.0 以降の Android Gradle プラグインを使用している場合には、クラスのパスは通常、次のようになります。
build/intermediates/javac/[<flavorName>]<buildType>/compile[<flavorName>]<buildType>JavaWithJavac/classes
たとえば、プロジェクトで Android Gradle プラグインのバージョン 3.2.0 を使用しており、GUI に release
ビルド タイプで pro
フレーバーのクラスを表示させたい場合には、パスは build/intermediates/javac/proRelease/compileProReleaseJavaWithJavac/classes
になります。
クラス ツリーを再作成するには、プロパティを更新後、ツール バーにある[Reload Class List]ボタンをクリックする必要があります。
Warning: File format changed. project.dox (vX.Y.Z) has been updated to vX.Y.Z. Please save the updated version.
この警告は、古いバージョンの DashO からプロジェクトの構成を開いた場合に発生します。 更新されたバージョンを保存すると、今後この警告は表示されなくなりますが、古いバージョンの DashO で開くこともできなくなります。 GUI は構成を保存する際、常に最新の形式を使用します。
Warning: Duplicate class {some class} in {some path} ignored; using version from {some other path}
同じクラス定義が、入力またはサポート クラスパスのいずれかの、2 つの異なるエントリに見つかりました。 これは、同じライブラリの複数のバージョンが構成されている場合、または同じクラスを含む(あるいは、同じ完全修飾名を使用する異なるクラスを含む)2 つの別個のライブラリがある場合に発生する可能性があります。 重複するライブラリを削除してください。 エントリの順序を変更することもできます。 後者のエントリのクラスは無視されるようになります。
Warning: Required Method Not Found: {some class and method} call to method {some method} in [class|interface] {some other class}
some class and method
の実行パスを調べているときに、some method
が some other class
に見つかりませんでした。
これは、DashO 構成内の正しくないバージョンのサポート ライブラリを参照した場合に発生する可能性があります。
入力およびサポート クラスパスを確認してください。
Ignore Missing Methods をオフにすると、この警告をエラーに格上げすることができます。
Warning: The 'EnclosingMethod' attribute of class '{some class}' references '{some other class}' which was not part of the inputs, and will be retained unmodified in the obfuscated output.
EnclosingMethod
属性は、ローカルまたは匿名の {some class}
を囲むクラスおよびメソッドを参照します。
不足している {some other class}
を入力に追加すれば、この警告は出ません。
{some other class}
がまったく存在しない場合は、ご利用のコンパイラに問題があることを示している場合があります。
元の名前が、保護済みコードでも依然として参照される、また {some other class}
を入力に追加できない場合は、DashO で EnclosingMethod
属性を除去するよう指示することができます。