Kotlin
PreEmptive Protection™ DashO™ for Android & Java では、JVM 用または Android 用にコンパイルされた Kotlin コードを保護することができます。 多くの場合、追加の DashO 構成を行わなくても DashO を使って Kotlin コードを処理するのは簡単にできますが、追加の構成が必要なビルド処理や Kotlin 機能もあります。
Kotlin ランタイム ライブラリ
DashO では、Kotlin ランタイム ライブラリを入力またはサポートとして提供する必要があります。 これは、以下のようなさまざまなタイプの DashO 構成に対して自動的に行われます。
- APK の後処理: すべての Kotlin ランタイム クラスは入力として扱われます。
- DashO Gradle プラグイン(Android 用):すべての Kotlin ランタイム クラスは入力として扱われます。
- DashO Gradle プラグイン(Java 用)(以前の Android プロジェクトなど):
includeAsInputs
を使って特定のライブラリを入力対象とする場合を除いて、Kotlin ランタイム クラスはサポートとして扱われます。
これらの構成では、Kotlin ライブラリを DashO 用の入力またはサポートとして明示的に追加する必要はありません。追加すると、クラスが重複するという問題が発生する可能性があります。
上記以外の DashO の構成には、入力またはサポートとして、必要に応じて Kotlin ランタイムの jar(例: Kotlin のバージョンによって kotlin-stdlib.jar
、kotlin-stdlib-jdk8.jar
、kotlin-stdlib-jdk7.jar
、kotlin-runtime.jar
)を追加します。
保護されたアプリケーションを Kotlin ラッパー スクリプトを使って実行する予定である場合は、ランタイムの jar をサポート ライブラリとして構成する必要があります。
そうでない場合、それらランタイムの jar はサポート ライブラリでも、または入力でも、どちらとしても構成することができます。
入力に追加された場合、DashO では、Kotlin ランタイム ライブラリから使用されていないクラスとメソッドの除去が行えます。
リフレクションの使用
Kotlin のリフレクション機能を使用する場合、またはリフレクションを内部的に使用するライブラリを使用する場合は、参照されるクラス、メソッド、およびフィールドを名前の変更対象から除外する必要があるかもしれません。
メモ:リフレクションを使用している場合は、できれば Kotlin ランタイムの jar をサポート ライブラリとして構成することをお勧めします。
コルーチン
Kotlin のコルーチン ライブラリは、その中で定義されているフィールドにアクセスするのに、リフレクションを頻繁に使用します。 コルーチン ライブラリのクラスが DashO によって入力として扱われる場合は、クラスに記述されているフィールドを名前変更の対象から除外する必要があります。
<renaming>
<excludelist>
<classes name="kotlinx.coroutines.**">
<field name="*"/>
</classes>
</excludelist>
</renaming>
Android モードのプロジェクトでは、名前変更と除去を管理しているのは R8 です。 Kotlin コルーチン ライブラリに定義されているフィールドが R8 によって除去されないようにするには、次の規則を追加します。
-keepclassmembers class kotlinx.coroutines.**{
volatile <fields>;
}