yGuardでJavaライブラリを難読化するのに問題があります。このライブラリの一部は、サービスプロバイダーインターフェイス(SPI)の実装であると想定されているため、難読化プロセスから除外する必要があります。このライブラリを使用する難読化されていないバージョンのアプリケーションは、問題なく動作します。ただし、難読化プロセスの後は、そうではありません。
<shrink>
これは、yGuardのANTタスクの要素が不適切に設定されていることが原因であると思われます。未使用と見なされるため、一部のメソッドが削除される可能性があります。パッケージとクラスが難読化の名前変更フェーズ()内で除外されていることを確認した<rename>
ので、問題の原因にはなりません。
縮小エンジンのエントリポイントとして実装しているメインインターフェイスで実装する必要がある唯一のメソッドを指定することで、SPI実装の縮小を回避できることを望んでいましたが、失敗しました。次に、このメソッドは他のインターフェイス実装に委任するので、すべてが歩き回ることを期待していました。私が以下に持っているものを見てください:
<shrink logfile="obfuscate_shrink_log.xml">
<property name="error-checking" value="pedantic"/>
<keep>
<method name="void main(java.lang.String[])" class="package.path.to.main.Class"/>
<method name="org.relaxng.datatype.DatatypeLibrary createDatatypeLibrary(java.lang.String)" class="package.path.to.my.implementation.of.DatatypeLibraryFactory"/>
<class classes="public"/>
</keep>
</shrink>
<rename mainclass="package.path.to.main.Class" logfile="obfuscate_rename_log.xml" replaceClassNameStrings="true">
<property name="error-checking" value="pedantic"/>
<keep>
<class name="package.path.to.my.implementation.of.DatatypeLibraryFactory"/>
<class name="package.path.to.my.implementation.of.DatatypeLibrary"/>
<class name="package.path.to.my.implementation.of.Datatype"/>
</keep>
</rename>
一連のorg.relaxng.datatypeインターフェースを実装しています。これらは、 Jingを使用してSPIを介して呼び出すことができます。
yGuardを使用して、難読化プロセス(名前の変更と縮小の両方)から除外するパッケージ全体を指定するにはどうすればよいですか?