Как установить логическое значение в false в методах в коде Smali

Есть только одно логическое значение, которое мне нужно установить в false. Затем это значение возвращается при вызове этого метода. Но у меня нет опыта работы с Smali, поэтому мне нужна помощь. Я декомпилировал apk как в java-код (чтобы знать, что искать), так и в Smali (чтобы редактировать и перекомпилировать). Вот метод в java-коде:

public PendingResult<Status> setMockMode(GoogleApiClient client, boolean isMockMode) {
        return client.zzb(new C06163(this, client, isMockMode));
    }

Я хочу изменить isMockMode в return на false, но это очень запутанно в smali. Вот небольшой код того же java-кода:

.method public setMockMode(Lcom/google/android/gms/common/api/GoogleApiClient;Z)Lcom/google/android/gms/common/api/PendingResult;
    .locals 1
    .parameter "client"
    .parameter "isMockMode"
    .annotation system Ldalvik/annotation/Signature;
        value = {
            "(",
            "Lcom/google/android/gms/common/api/GoogleApiClient;",
            "Z)",
            "Lcom/google/android/gms/common/api/PendingResult",
            "<",
            "Lcom/google/android/gms/common/api/Status;",
            ">;"
        }
    .end annotation

    .prologue
    new-instance v0, Lcom/google/android/gms/location/internal/zzd$3;

    invoke-direct {v0, p0, p1, p2}, Lcom/google/android/gms/location/internal/zzd$3;-><init>(Lcom/google/android/gms/location/internal/zzd;Lcom/google/android/gms/common/api/GoogleApiClient;Z)V

    invoke-virtual {p1, v0}, Lcom/google/android/gms/common/api/GoogleApiClient;->zzb(Lcom/google/android/gms/internal/zzlb$zza;)Lcom/google/android/gms/internal/zzlb$zza;

    move-result-object v0

    return-object v0
.end method

Код на Smali слишком сложен, чтобы я мог его понять. Так что помогите, пожалуйста :)


person Shahbaz Talpur    schedule 26.08.2016    source источник
comment
@Vince Emigh, пожалуйста, помогите, чувак, я хорошо знаю, что это не служба перевода. Нет хороших руководств для начала изучения smali. И мне просто нужно отредактировать этот файл.   -  person Shahbaz Talpur    schedule 27.08.2016


Ответы (1)


Надеюсь, что следующее не требует пояснений.

.method public setMockMode(Lcom/google/android/gms/common/api/GoogleApiClient;Z)Lcom/google/android/gms/common/api/PendingResult;
    # change here 1 -> 2 to allow for another local variable v1
    .locals 2
    .prologue

    new-instance v0, Lcom/google/android/gms/location/internal/zzd$3;

    # add this line: v1 = 0; 0 is 'false'
    const/4 v1, 0x0

    # pass v1, which is set to 'false', instead of p2 containing isMockMode
    invoke-direct {v0, p0, p1, v1}, Lcom/google/android/gms/location/internal/zzd$3;-><init>(Lcom/google/android/gms/location/internal/zzd;Lcom/google/android/gms/common/api/GoogleApiClient;Z)V
    invoke-virtual {p1, v0}, Lcom/google/android/gms/common/api/GoogleApiClient;->zzb(Lcom/google/android/gms/internal/zzlb$zza;)Lcom/google/android/gms/internal/zzlb$zza;
    move-result-object v0
    return-object v0
.end method
person Ilia Barahovski    schedule 28.08.2016