J'essaie d'apprendre à décompiler Android Program (APK) et a trouvé ce site Decompilers Online . C'était une grille de travail pour Java = code mais lorsqu'il y a un code de fichiers kotlin, le décompiler produit Java code et il mélange Kotlin et Java.
Voici ce que je vois du fichier ColorCircle.kt
. Comme vous le voyez, Kotlin Lazy
est là et autre code Kotlin. Mes questions sont: y a-t-il un autre Decompiler pour les fichiers kotlin qui décompile dans les fichiers Kotlin * .kt ?
[.____] Puis-je avoir des importations de kotlin dans *.Java
fichiers sans problèmes?
package io.coolbe.vai.view;
import Android.content.Context;
import Android.graphics.Canvas;
import Android.graphics.Paint;
import Android.util.AttributeSet;
import Android.view.View;
import io.coolbe.vai.C1300R;
import Java.util.HashMap;
import kotlin.Lazy;
import kotlin.Metadata;
import kotlin.jvm.functions.Function0;
import kotlin.jvm.internal.Intrinsics;
import kotlin.jvm.internal.PropertyReference1Impl;
import kotlin.jvm.internal.Reflection;
import kotlin.reflect.KProperty;
import org.jetbrains.annotations.NotNull;
@Metadata(bv = {1, 0, 3}, d1 = {"\u0000>\n\u0002\u0018\u0002\n\u0002\u0018\u0002\n\u0000\n\u0002\u0018\u0002\n\u0002\b\u0002\n\u0002\u0018\u0002\n\u0002\b\u0002\n\u0002\u0010\u0007\n\u0002\b\u0002\n\u0002\u0018\u0002\n\u0002\b\u0005\n\u0002\u0010\b\n\u0002\b\u0002\n\u0002\u0010\u0002\n\u0000\n\u0002\u0018\u0002\n\u0000\u0018\u00002\u00020\u0001B\u000f\b\u0016\u0012\u0006\u0010\u0002\u001a\u00020\u0003¢\u0006\u0002\u0010\u0004B\u0017\b\u0016\u0012\u0006\u0010\u0002\u001a\u00020\u0003\u0012\u0006\u0010\u0005\u001a\u00020\u0006¢\u0006\u0002\u0010\u0007J\u0010\u0010\u0014\u001a\u00020\u00152\u0006\u0010\u0016\u001a\u00020\u0017H\u0014R\u000e\u0010\b\u001a\u00020\tX\u000e¢\u0006\u0002\n\u0000R\u000e\u0010\n\u001a\u00020\tX\u000e¢\u0006\u0002\n\u0000R\u001b\u0010\u000b\u001a\u00020\f8BX\u0002¢\u0006\f\n\u0004\b\u000f\u0010\u0010\u001a\u0004\b\r\u0010\u000eR\u000e\u0010\u0011\u001a\u00020\u0012X\u000e¢\u0006\u0002\n\u0000R\u000e\u0010\u0013\u001a\u00020\tX\u000e¢\u0006\u0002\n\u0000¨\u0006\u0018"}, d2 = {"Lio/coolbe/vai/view/ColoredCircle;", "Landroid/view/View;", "context", "Landroid/content/Context;", "(Landroid/content/Context;)V", "attrs", "Landroid/util/AttributeSet;", "(Landroid/content/Context;Landroid/util/AttributeSet;)V", "offsetX", "", "offsetY", "Paint", "Landroid/graphics/Paint;", "getPaint", "()Landroid/graphics/Paint;", "Paint$delegate", "Lkotlin/Lazy;", "strokeColor", "", "strokeWidth", "onDraw", "", "canvas", "Landroid/graphics/Canvas;", "app_release"}, k = 1, mv = {1, 1, 13})
/* compiled from: ColoredCircle.kt */
public final class ColoredCircle extends View {
static final /* synthetic */ KProperty[] $$delegatedProperties = new KProperty[]{Reflection.property1(new PropertyReference1Impl(Reflection.getOrCreateKotlinClass(ColoredCircle.class), "Paint", "getPaint()Landroid/graphics/Paint;"))};
private HashMap _$_findViewCache;
private float offsetX;
private float offsetY;
private final Lazy Paint$delegate;
private int strokeColor;
private float strokeWidth;
private final Paint getPaint() {
Lazy lazy = this.Paint$delegate;
KProperty kProperty = $$delegatedProperties[0];
return (Paint) lazy.getValue();
}
public vaid _$_clearFindViewByIdCache() {
HashMap hashMap = this._$_findViewCache;
if (hashMap != null) {
hashMap.clear();
}
}
public View _$_findCachedViewById(int i) {
if (this._$_findViewCache == null) {
this._$_findViewCache = new HashMap();
}
View view = (View) this._$_findViewCache.get(Integer.valueOf(i));
if (view != null) {
return view;
}
view = findViewById(i);
this._$_findViewCache.put(Integer.valueOf(i), view);
return view;
}
public ColoredCircle(@NotNull Context context) {
Intrinsics.checkParameterIsNotNull(context, "context");
super(context);
this.strokeColor = -7829368;
this.strokeWidth = 10.0f;
this.Paint$delegate = LazyKt__LazyJVMKt.lazy((Function0) new ColoredCircle$Paint$2(this));
}
public ColoredCircle(@NotNull Context context, @NotNull AttributeSet attributeSet) {
Intrinsics.checkParameterIsNotNull(context, "context");
Intrinsics.checkParameterIsNotNull(attributeSet, "attrs");
super(context, attributeSet);
this.strokeColor = -7829368;
this.strokeWidth = 10.0f;
this.Paint$delegate = LazyKt__LazyJVMKt.lazy(new ColoredCircle$Paint$2(this));
context = context.getTheme().obtainStyledAttributes(attributeSet, C1300R.styleable.ColoredCircle, 0, 0);
try {
this.offsetX = context.getDimension(0, this.offsetX);
this.offsetY = context.getDimension(1, this.offsetY);
this.strokeColor = context.getColor(2, this.strokeColor);
this.strokeWidth = context.getDimension(3, this.strokeWidth);
} finally {
context.recycle();
}
}
protected vaid onDraw(@NotNull Canvas canvas) {
Intrinsics.checkParameterIsNotNull(canvas, "canvas");
super.onDraw(canvas);
float f = (float) getLayoutParams().width;
float f2 = (float) getLayoutParams().height;
float f3 = (float) 2;
float min = (Math.min(f, f2) / f3) - (this.strokeWidth / f3);
canvas.save();
canvas.translate(this.offsetX, this.offsetY);
canvas.drawCircle(f / f3, f2 / f3, min, getPaint());
canvas.restore();
}
}
Y a-t-il un autre décompiler pour les fichiers de kotlin qui décompile dans les fichiers Kotlin * .kt?
Actuellement, il n'y a pas de "confortable" décompiler à faire .class -> .kt
.
Il y a plusieurs célèbres décompiler do .class -> .Java
, mais ils conviennent juste pour le bytecode Java compilateur généré. Si vous essayez de les utiliser pour décompiler, certains bytecodes générés par Kotlin, vous pouvez voir quelque chose de bizarre même d'erreur. Ceci est causé par certains astuces utilisées pour écrire et compiler Kotlin.
Ensuite, dans la plupart du temps, vous ne pouvez pas utiliser directement la sortie Decompiler.
Puis-je avoir des importations de kotlin dans * .java fichiers sans problèmes?
Ceci est une question liée à "100% interopérable avec Java" . Kotlin peut être importé dans un .Java
Fichier presque sans problèmes (je ne suis pas sûr s'il y aura des questions lorsque nous passerons Java Lambda dans Kotlin, mais la manière commune de la fonction appelle n'est sûrement aucun problème).