Loading...
Showing posts with label Oprek. Show all posts
Showing posts with label Oprek. Show all posts

Cara Menambahkan Fitur Face Unlock di ROM MIUI 9

bamzzz 12:13 PM 72 Comments
faceunlock

Sejak hadirnya Mi Note 3 yang memiliki fitur Face Unlock, hal itu membuat beberapa opreker penasaran, bagaimana sih cara menambahkan fitur face unlock ini pada perangkat mereka. Disini saya akan buat tutorialnya.

TIDAK DAPAT DITERAPKAN DI ROM MIUI GLOBAL DEV MULAI DARI VERSI 7.12.28.
java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/system/framework/miuistatssdkshared.jar", zip file "/system/framework/gson.jar", zip file "/system/priv-app/MiuiKeyguard/MiuiKeyguard.apk"],nativeLibraryDirectories=[/system/priv-app/MiuiKeyguard/lib/arm64, /vendor/lib64, /system/lib64]]] couldn't find "libMegviiUnlock-jni-1.2.so"

Syarat:

Bahan:
  • lib-face-unlock -> Download
  • raw-MiuiKeyguard -> Download
  • MiuiSettings.apk (Ambil dari system/priv-app)
  • MiuiKeyguard.apk (Ambil dari system/priv-app)

Langkah-langkah:
  • Bagian MiuiSettings
Decompile MiuiSettings.apk
Cari text "jason" di seluruh smali yag ada di "\smali\com\android\settings"
Di ROM Global Dev 7.11.6 letaknya ada di "\smali\com\android\settings\fj.1.smali"

Di dalam method yang ada string "jason" tadi, cari:


return v0

Tambahkan ini diatasnya:


const/4 v0, 0x1

Hingga hasilnya akan seperti ini:


.method public static fF()Z
.locals 2

.prologue
.line 57
sget-object v0, Landroid/os/Build;->DEVICE:Ljava/lang/String;

const-string v1, "jason"

invoke-virtual {v0, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z

move-result v0

if-eqz v0, :cond_0

sget-boolean v0, Lmiui/os/Build;->IS_INTERNATIONAL_BUILD:Z

if-nez v0, :cond_0

const/4 v0, 0x1

:goto_0
const/4 v0, 0x1

return v0

:cond_0
const/4 v0, 0x0

goto :goto_0
.end method

Recompile Settings.apk

  • Bagian MiuiKeyguard
Decompile MiuiKeyguard.apk
Salin file raw ke folder res, timpa file yang sudah ada.
Buka AndroidManifest.xml
Cari:



</application>

Tambahkan text ini diatasnya:


<activity android:excludeFromRecents="true" android:label="@string/face_data_input_title" android:name=".settings.MiuiFaceDataIntroduction" android:screenOrientation="portrait" android:theme="@style/Theme.Main"/>
<activity android:excludeFromRecents="true" android:label="@string/face_data_input_title" android:name=".settings.MiuiFaceDataSuggestion" android:screenOrientation="portrait" android:theme="@style/Theme.Main"/>
<activity android:excludeFromRecents="true" android:label="@string/face_data_input_title" android:name=".settings.MiuiFaceDataInput" android:screenOrientation="portrait" android:theme="@style/Theme.Main"/>
<activity android:excludeFromRecents="true" android:label="@string/face_data_introduction_title" android:name=".settings.MiuiFaceDataManage" android:screenOrientation="portrait" android:theme="@style/Theme.Main"/>

Hingga hasilnya menjadi seperti ini:


<?xml version="1.0" encoding="utf-8" standalone="no"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:sharedUserId="android.uid.system" coreApp="true" package="com.android.keyguard" platformBuildVersionCode="23" platformBuildVersionName="6.0.1">
<uses-permission android:name="android.permission.VIBRATE"/>
<uses-permission android:name="android.permission.MODIFY_PHONE_STATE"/>
<uses-permission android:name="android.permission.GET_ACCOUNTS"/>
<uses-permission android:name="android.permission.MANAGE_ACCOUNTS"/>
<uses-permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL"/>
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.STATUS_BAR"/>
<uses-permission android:name="android.permission.DEVICE_POWER"/>
<uses-permission android:name="android.permission.MANAGE_USERS"/>
<uses-permission android:name="android.permission.MANAGE_APP_TOKENS"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS"/>
<uses-permission android:name="android.permission.BIND_APPWIDGET"/>
<uses-permission android:name="android.permission.INTERNAL_SYSTEM_WINDOW"/>
<uses-permission android:name="android.permission.BIND_DEVICE_ADMIN"/>
<uses-permission android:name="android.permission.CHANGE_COMPONENT_ENABLED_STATE"/>
<uses-permission android:name="android.permission.MEDIA_CONTENT_CONTROL"/>
<uses-permission android:name="android.permission.ACCESS_KEYGUARD_SECURE_STORAGE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.USE_FINGERPRINT"/>
<uses-permission android:name="com.fingerprints.service.ACCESS_FINGERPRINT_MANAGER"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="com.miui.powercenter.permission.POWER_DATA"/>
<uses-library android:name="cloud-common.jar"/>
<application android:name="miui.external.Application" android:persistent="true" android:process="com.android.systemui" android:supportsRtl="true">
<uses-library android:name="miui-stat.jar"/>
<uses-library android:name="gson.jar"/>
<meta-data android:name="SupportTrackViewForLockScreenAd" android:value="true"/>
<service android:exported="true" android:name=".KeyguardService"/>
<service android:name="miui.maml.elements.MusicListenerService" android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE">
<intent-filter>
<action android:name="android.service.notification.MusicListenerService"/>
</intent-filter>
</service>
<activity android:excludeFromRecents="true" android:label="@string/face_data_input_title" android:name=".settings.MiuiFaceDataIntroduction" android:screenOrientation="portrait" android:theme="@style/Theme.Main"/>
<activity android:excludeFromRecents="true" android:label="@string/face_data_input_title" android:name=".settings.MiuiFaceDataSuggestion" android:screenOrientation="portrait" android:theme="@style/Theme.Main"/>
<activity android:excludeFromRecents="true" android:label="@string/face_data_input_title" android:name=".settings.MiuiFaceDataInput" android:screenOrientation="portrait" android:theme="@style/Theme.Main"/>
<activity android:excludeFromRecents="true" android:label="@string/face_data_introduction_title" android:name=".settings.MiuiFaceDataManage" android:screenOrientation="portrait" android:theme="@style/Theme.Main"/>

</application>
</manifest>

Buka /smali/com/android/keyguard/MiuiKeyguardUtils.smali
Cari:


.method public static isSupportFaceUnlock()Z

Lalu dalam method tersebut, cari:


return v0

Setelah ketemu, tambahkan ini diatasnya:


const/4 v0, 0x1

Hingga hasilnya menjadi seperti ini:


.method public static isSupportFaceUnlock()Z
.locals 2

.prologue
.line 239
sget-object v0, Lmiui/os/Build;->DEVICE:Ljava/lang/String;

const-string v1, "jason"

invoke-virtual {v0, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z

move-result v0

if-eqz v0, :cond_0

sget-boolean v0, Lmiui/os/Build;->IS_INTERNATIONAL_BUILD:Z

if-nez v0, :cond_0

const/4 v0, 0x1

:goto_0
const/4 v0, 0x1

return v0

:cond_0
const/4 v0, 0x0

goto :goto_0
.end method

Recompile MiuiKeyguard.spk

  • Bagian Finishing
  1. Salin file lib ke dalam folder /system/lib64/
  2. Set seluruh permission filenya menjadi rw-r--r-- (0644)
  3. Salin MiuiSettings.apk dan MiuiKeyguard ke tampatnya masing-masing, set permission file menjadi rw-r--r-- (0644).
  4. Reboot System
  5. Selesai.

Cara Penggunaan:
Setelah menambahkan data wajah di Pengaturan -> Kunci layar & sandi -> Kelola data wajah
Coba kunci ponsel kamu, lalu hidupkan layar ponsel, arahkan ke wajah.

File yang sudah di modif (Global Dev 7.11.12):
FaceUnlock-bootloop.id.zip (Isinya: Settings.apk - MiuiKeyguard.apk - lib face unlock)

Screenshot:
faceunlock

faceunlock

faceunlock



Demikianlah artikel ini dibuat, semoga bermanfaat. Apabila ada pertanyan silahkan tinggalkan komentar.

Hasil compare MiuiKeyguard dari ROM Kenzo vs ROM Jason:
kenzovsjason


Referensi: MIUI Forum  | Mi Note 3 ROM | MIUIPRO

Disable Signature Verification di ROM Android Termasuk MIUI

bamzzz 11:59 AM 7 Comments
signature-hack

Fungsi dari Disable Signature Verification adalah untuk membebaskan kita menambahkan/memodif file apk yang ada di system dan data tanpa dipusingkan dengan segala macam signature yang selalu ada di file apk. Terutama sangat dibutuhkan jika kita ingin memodif file apk system yang berhubungan dengan AndroidManifest.
Disini saya berikan tutorial lengkapnya, termasuk disable signature miui yang biasanya sangat alot di bypass. Hingga setelah terapkan, kamu dapat menghapus app system bawaan miui yang tidak kamu butuhkan, seperti MiuiStore, etc. Tanpa takut bootloop.

Syarat:
  • Rooted
  • Deodexed ROM

Bahan:
  • core-libart.jar (ambil dari /system/framework)
  • services,jar (ambil dari /system/framework)

Langkah-langkah:

  • Bagian core-libart
Decompile core-libart.jar
Buka /smali/java/security/Signature.smali
Cari:


.method public final verify([B)Z

Lalu didalam method tersebut, cari:


return v0

Tambahkan ini diatasnya:


const/4 v0, 0x1

Hingga hasilnya menjadi seperti ini:


.method public final verify([B)Z
.locals 2
.param p1, "signature" # [B
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/security/SignatureException;
}
.end annotation

.prologue
.line 449
iget v0, p0, Ljava/security/Signature;->state:I

const/4 v1, 0x3

if-eq v0, v1, :cond_0

.line 450
new-instance v0, Ljava/security/SignatureException;

const-string v1, "Signature object is not initialized properly"

invoke-direct {v0, v1}, Ljava/security/SignatureException;-><init>(Ljava/lang/String;)V

throw v0

.line 452
:cond_0
invoke-virtual {p0, p1}, Ljava/security/Signature;->engineVerify([B)Z

move-result v0

const/4 v0, 0x1

return v0
.end method

Masih di /smali/java/security/Signature.smali
Cari:


.method public final verify([BII)Z

Lalu didalam method tersebut, cari:


return v0

Tambahkan ini diatasnya:


const/4 v0, 0x1

Hingga hasilnya menjadi seperti ini:


.method public final verify([BII)Z
.locals 2
.param p1, "signature" # [B
.param p2, "offset" # I
.param p3, "length" # I
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/security/SignatureException;
}
.end annotation

.prologue
.line 481
iget v0, p0, Ljava/security/Signature;->state:I

const/4 v1, 0x3

if-eq v0, v1, :cond_0

.line 482
new-instance v0, Ljava/security/SignatureException;

const-string v1, "Signature object is not initialized properly"

invoke-direct {v0, v1}, Ljava/security/SignatureException;-><init>(Ljava/lang/String;)V

throw v0

.line 484
:cond_0
if-eqz p1, :cond_1

if-ltz p2, :cond_1

if-ltz p3, :cond_1

add-int v0, p2, p3

array-length v1, p1

if-le v0, v1, :cond_2

.line 486
:cond_1
new-instance v0, Ljava/lang/IllegalArgumentException;

invoke-direct {v0}, Ljava/lang/IllegalArgumentException;-><init>()V

throw v0

.line 488
:cond_2
invoke-virtual {p0, p1, p2, p3}, Ljava/security/Signature;->engineVerify([BII)Z

move-result v0

const/4 v0, 0x1

return v0
.end method

Buka /smali/java/security/MessageDigest.smali
Cari:


.method public static isEqual([B[B)Z

Lalu didalam method tersebut, cari:


return v2

Tambahkan ini diatasnya:


const/4 v2, 0x1

Hingga hasilnya menjadi seperti ini:


.method public static isEqual([B[B)Z
.locals 5
.param p0, "digesta" # [B
.param p1, "digestb" # [B

.prologue
const/4 v2, 0x0

.line 303
array-length v3, p0

array-length v4, p1

if-eq v3, v4, :cond_1

.line 311
:cond_0
:goto_0
const/4 v2, 0x1

return v2

.line 307
:cond_1
const/4 v1, 0x0

.line 308
.local v1, "v":I
const/4 v0, 0x0

.local v0, "i":I
:goto_1
array-length v3, p0

if-ge v0, v3, :cond_2

.line 309
aget-byte v3, p0, v0

aget-byte v4, p1, v0

xor-int/2addr v3, v4

or-int/2addr v1, v3

.line 308
add-int/lit8 v0, v0, 0x1

goto :goto_1

.line 311
:cond_2
if-nez v1, :cond_0

const/4 v2, 0x1

goto :goto_0
.end method

Recompile core-libart

  • Bagian services
Decompile services.jar
Buka /smali/com/android/server/pm/PackageManagerService.smali
Cari:


.method static compareSignatures([Landroid/content/pm/Signature;[Landroid/content/pm/Signature;)I

Lalu didalam method tersebut, cari:


return v6

Tambahkan ini diatasnya:


const/4 v6, 0x0

Hingga hasilnya menjadi seperti ini:


.method static compareSignatures([Landroid/content/pm/Signature;[Landroid/content/pm/Signature;)I
.locals 11
.param p0, "s1" # [Landroid/content/pm/Signature;
.param p1, "s2" # [Landroid/content/pm/Signature;

.prologue
const/4 v6, 0x1

const/4 v8, -0x3

const/4 v7, 0x0

.line 4072
if-nez p0, :cond_1

.line 4073
if-nez p1, :cond_0

.line 4105
:goto_0
const/4 v6, 0x0

return v6

.line 4073
:cond_0
const/4 v6, -0x1

goto :goto_0

.line 4078
:cond_1
if-nez p1, :cond_2

.line 4079
const/4 v6, -0x2

goto :goto_0

.line 4082
:cond_2
array-length v9, p0

array-length v10, p1

if-eq v9, v10, :cond_3

move v6, v8

.line 4083
goto :goto_0

.line 4087
:cond_3
array-length v9, p0

if-ne v9, v6, :cond_5

.line 4088
aget-object v6, p0, v7

aget-object v9, p1, v7

invoke-virtual {v6, v9}, Landroid/content/pm/Signature;->equals(Ljava/lang/Object;)Z

move-result v6

if-eqz v6, :cond_4

move v6, v7

goto :goto_0

:cond_4
move v6, v8

goto :goto_0

.line 4093
:cond_5
new-instance v3, Landroid/util/ArraySet;

invoke-direct {v3}, Landroid/util/ArraySet;-><init>()V

....

....

.end method

Masih di /smali/com/android/server/pm/PackageManagerService.smali
Cari:


.method private compareSignaturesCompat(Lcom/android/server/pm/PackageSignatures;Landroid/content/pm/PackageParser$Package;)I


Lalu didalam method tersebut, dibawah param/line, seperti ini:


.param p1, "existingSigs" # Lcom/android/server/pm/PackageSignatures;
.param p2, "scannedPkg" # Landroid/content/pm/PackageParser$Package;

.prologue
.line 4126

Tambahkan:


const/4 v14, 0x0

return v14

Hingga hasilnya menjadi seperti ini:


.method private compareSignaturesCompat(Lcom/android/server/pm/PackageSignatures;Landroid/content/pm/PackageParser$Package;)I
.locals 17
.param p1, "existingSigs" # Lcom/android/server/pm/PackageSignatures;
.param p2, "scannedPkg" # Landroid/content/pm/PackageParser$Package;

.prologue
.line 4126
const/4 v14, 0x0

return v14

move-object/from16 v0, p0

move-object/from16 v1, p2

invoke-direct {v0, v1}, Lcom/android/server/pm/PackageManagerService;->isCompatSignatureUpdateNeeded(Landroid/content/pm/PackageParser$Package;)Z

move-result v14

if-nez v14, :cond_0

....

....

.end method


Masih di /smali/com/android/server/pm/PackageManagerService.smali
Cari:


.method private compareSignaturesRecover(Lcom/android/server/pm/PackageSignatures;Landroid/content/pm/PackageParser$Package;)I

Lalu didalam method tersebut, cari:


return v2

Tambahkan ini diatasnya:


const/4 v2, 0x0

Hingga hasilnya menjadi seperti ini:


.method private compareSignaturesRecover(Lcom/android/server/pm/PackageSignatures;Landroid/content/pm/PackageParser$Package;)I
.locals 7
.param p1, "existingSigs" # Lcom/android/server/pm/PackageSignatures;
.param p2, "scannedPkg" # Landroid/content/pm/PackageParser$Package;

.prologue
const/4 v6, 0x4

const/4 v2, -0x3

.line 4168
invoke-direct {p0, p2}, Lcom/android/server/pm/PackageManagerService;->isRecoverSignatureUpdateNeeded(Landroid/content/pm/PackageParser$Package;)Z

move-result v3

if-nez v3, :cond_0

.line 4185
:goto_0
const/4 v2, 0x0

return v2

.line 4172
:cond_0
const/4 v1, 0x0

.line 4174
.local v1, "msg":Ljava/lang/String;
:try_start_0
iget-object v3, p1, Lcom/android/server/pm/PackageSignatures;->mSignatures:[Landroid/content/pm/Signature;

iget-object v4, p2, Landroid/content/pm/PackageParser$Package;->mSignatures:[Landroid/content/pm/Signature;

invoke-static {v3, v4}, Landroid/content/pm/Signature;->areEffectiveMatch([Landroid/content/pm/Signature;[Landroid/content/pm/Signature;)Z

move-result v3

if-eqz v3, :cond_1

.line 4175
const/4 v3, 0x4

new-instance v4, Ljava/lang/StringBuilder;

invoke-direct {v4}, Ljava/lang/StringBuilder;-><init>()V

const-string v5, "Recovered effectively matching certificates for "

invoke-virtual {v4, v5}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

move-result-object v4

....

....

.end method

Untuk ROM Android selain MIUI sudah selesai sampai disini. Silahkan lanjut ke bagian finishing.
Khusus ROM MIUI silahkan lanjutkan tutorialnya.

Buka /smali/com/miui/server/SecurityManagerService.smali
Cari:


.method private checkSysAppCrack()Z

Lalu didalam method tersebut, cari:


const/4 v8, 0x0

Tambahkan ini dibawahnya:


const/4 v3, 0x1

return v3

Hingga hasilnya menjadi seperti ini:


.method private checkSysAppCrack()Z
.locals 9

.prologue
const/4 v8, 0x0

const/4 v3, 0x1

return v3


.line 602
new-instance v1, Ljava/util/ArrayList;

invoke-direct {v1}, Ljava/util/ArrayList;-><init>()V

.line 603
.local v1, "appsTobeChecked":Ljava/util/ArrayList;, "Ljava/util/ArrayList<Lcom/miui/server/SecurityManagerService$AppItem;>;"
new-instance v5, Lcom/miui/server/SecurityManagerService$AppItem;

const-string v6, "com.miui.home"

const-string v7, "3082046c30820354a003020102020900e552a8ecb9011b7c300d06092a864886f70d0101050500308180310b300906035504061302434e3110300e060355040813074265696a696e673110300e060355040713074265696a696e67310f300d060355040a13065869616f6d69310d300b060355040b13044d495549310d300b060355040313044d495549311e301c06092a864886f70d010901160f6d697569407869616f6d692e636f6d301e170d3131313230363033323632365a170d3339303432333033323632365a308180310b300906035504061302434e3110300e060355040813074265696a696e673110300e060355040713074265696a696e67310f300d060355040a13065869616f6d69310d300b060355040b13044d495549310d300b060355040313044d495549311e301c06092a864886f70d010901160f6d697569407869616f6d692e636f6d30820120300d06092a864886f70d01010105000382010d00308201080282010100c786568a9aff253ad74c5d3e6fbffa12fed44cd3244f18960ec5511bb551e413115197234845112cc3df9bbacd3e0f4b3528cd87ed397d577dc9008e9cbc6a25fc0664d3a3f440243786db8b250d40f6f148c9a3cd6fbc2dd8d24039bd6a8972a1bdee28c308798bfa9bb3b549877b10f98e265f118c05f264537d95e29339157b9d2a31485e0c823521cca6d0b721a8432600076d669e20ac43aa588b52c11c2a51f04c6bb31ad6ae8573991afe8e4957d549591fcb83ec62d1da35b1727dc6b63001a5ef387b5a7186c1e68da1325772b5307b1bc739ef236b9efe06d52dcaf1e32768e3403e55e3ec56028cf5680cfb33971ccf7870572bc47d3e3affa385020103a381e83081e5301d0603551d0e0416041491ae2f8c72e305f92aa9f7452e2a3160b841a15c3081b50603551d230481ad3081aa801491ae2f8c72e305f92aa9f7452e2a3160b841a15ca18186a48183308180310b300906035504061302434e3110300e060355040813074265696a696e673110300e060355040713074265696a696e67310f300d060355040a13065869616f6d69310d300b060355040b13044d495549310d300b060355040313044d495549311e301c06092a864886f70d010901160f6d697569407869616f6d692e636f6d820900e552a8ecb9011b7c300c0603551d13040530030101ff300d06092a864886f70d010105050003820101003b3a699ceb497300f2ab86cbd41c513440bf60aa5c43984eb1da140ef30544d9fbbb3733df24b26f2703d7ffc645bf598a5e6023596a947e91731542f2c269d0816a69c92df9bfe8b1c9bc3c54c46c12355bb4629fe6020ca9d15f8d6155dc5586f5616db806ecea2d06bd83e32b5f13f5a04fe3e5aa514f05df3d555526c63d3d62acf00adee894b923c2698dc571bc52c756ffa7a2221d834d10cb7175c864c30872fe217c31442dff0040a67a2fb1c8ba63eac2d5ba3d8e76b4ff2a49b0db8a33ef4ae0dd0a840dd2a8714cb5531a56b786819ec9eb1051d91b23fde06bd9d0708f150c4f9efe6a416ca4a5e0c23a952af931ad3579fb4a8b19de98f64bd9"

invoke-direct {v5, v6, v7, v8}, Lcom/miui/server/SecurityManagerService$AppItem;-><init>(Ljava/lang/String;Ljava/lang/String;Z)V

invoke-virtual {v1, v5}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z

....

....

.end method


Masih di /smali/com/miui/server/SecurityManagerService.smali
Cari:


.method private checkSystemSelfProtection(Z)V

Hapus semua text didalam  method tersebut , lalu rubah hingga hasilnya menjadi seperti ini:


.method private checkSystemSelfProtection(Z)V
.locals 2
.param p1, "onlyCore" # Z

.prologue
.line 517
const-string v0, "SystemSelfProtection"

const-string v1, "bypassed by bamzzz@xda"

invoke-static {v0, v1}, Landroid/util/Log;->i(Ljava/lang/String;Ljava/lang/String;)I

.line 588
return-void
.end method

Recompile services


  • Bagian Finishing

Salin kembali core-libart.jar dan services.jar ke dalam folder /system/framework, set permission files nya rw--r--r-- (0644).
Reboot system
Selesai

Demikianlah artikel ini dibuat, semoga bermanfaat.

Referensi: Forum Multirom

Cara Modifikasi Theme Manager di MIUI 8 (Support Font, Boot Animation, dll)

bamzzz 5:14 PM 5 Comments
Cara membuat modifikasi theme manager untuk MIUI 8 by bamzzz

miui

TIDAK DAPAT DITERAPKAN DI ROM MIUI GLOBAL DEV MULAI DARI VERSI 7.12.28.

Fitur:
  • Support tema pihak ke-3.
  • Apply tema secara offline (tanpa melalui verifikasi server xiaomi).
  • Menampilkan font di dashboard.
  • Mencegah tema kembali ke default saat menggunakan tema pihak ke-3.
  • Support boot animation tanpa akun theme designer.


Peralatan dan Persyaratan:
  • APKTool / MT Manager
  • Flashable zip kosong, Download
  • TWRP installer
  • miuisystem.apk (./system/app/miuisystem/miuisystem.apk)
  • ThemeManager.apk (./system/app/ThemeManager/ThemeManager.apk)
  • Backup file asli sebelum modding
  • Full backup lewat twrp direkomendasikan.
  • Bahan compare: Download


Modding Bagian 1:
  • Decompile miuisystem.apk

Buka ./miui/drm/DrmManager.smali

Cari:

.method public static isLegal(Landroid/content/Context;Ljava/lang/String;Ljava/io/File;)Lmiui/drm/DrmManager$DrmResult;

Kemudian cari:

return-object v4

Diatasnya tambahkan:

sget-object v4, Lmiui/drm/DrmManager$DrmResult;->DRM_SUCCESS:Lmiui/drm/DrmManager$DrmResult;

Cari:

.method private static isLegal(Landroid/content/Context;Ljava/lang/String;Lmiui/drm/DrmManager$RightObject;)Lmiui/drm/DrmManager$DrmResult;

Kemudian cari:

return-object v8

Diatasnya tambahkan:

sget-object v8, Lmiui/drm/DrmManager$DrmResult;->DRM_SUCCESS:Lmiui/drm/DrmManager$DrmResult;

Cari:

.method public static isPermanentRights(Ljava/io/File;)Z

Kemudian cari:

return v0

Diatasnya tambahkan:

const/4 v0, 0x1

Cari:

.method private static isRightsFileLegal(Ljava/io/File;)Z

Kemudian cari:

return v13

Diatasnya tambahkan:

const/4 v13, 0x1

Cari:

.method public static isSupportAd(Landroid/content/Context;)Z

Kemudian cari:

return v0

Diatasnya tambahkan:

const/4 v0, 0x0

Cari:

.method public static setSupportAd(Landroid/content/Context;Z)V

Kemudian cari:

const/4 v0, 0x1

Ubah Menjadi:

const/4 v0, 0x0

Buka ./miui/drm/ThemeReceiver$1.smali

Cari:

invoke-virtual {v3}, Lmiui/content/res/ThemeRuntimeManager;->restoreDefault()V

Ubah menjadi:

#    invoke-virtual {v3}, Lmiui/content/res/ThemeRuntimeManager;->restoreDefault()V
  • Recompile miuisystem.apk.


Modding Bagian 2:
  • Decompile ThemeManager.apk

Buka ./com/android/thememanager/controller/online/DrmService.smali

Cari:

.method public isLegal(Lcom/android/thememanager/model/Resource;)Lmiui/drm/DrmManager$DrmResult;

Kemudian cari:

return-object v5

Diatasnya tambahkan:

sget-object v5, Lmiui/drm/DrmManager$DrmResult;->DRM_SUCCESS:Lmiui/drm/DrmManager$DrmResult;


Buka ./com/android/thememanager/util/ThemeHelper.smali

Cari:

.method public static supportBootAnimation()Z

Kemudian cari:

return v0

Diatasnya tambahkan:

const/4 v0, 0x1

Cari:

.method public static supportReplaceFont()Z

Kemudian cari:

return v0

Diatasnya tambahkan:

const/4 v0, 0x1

Buka ./com/android/thememanager/util/ThemeOperationHandler.smali

Cari:

.method private reset()V

Kemudian cari:

iput-boolean v0, p0, Lcom/android/thememanager/util/ThemeOperationHandler;->mIsLegal:Z

Diatasnya tambahkan:

const/4 v0, 0x1

Cari:

.method protected isLegal()Z

Kemudian cari:

return v0

Diatasnya tambahkan:

const/4 v0, 0x1

Cari:

.method public isPermanentRights()Z

Kemudian cari:

return v1

Diatasnya tambahkan:

const/4 v1, 0x1

Cari:

.method public final onApplyEventPerformed()V

Kemudian cari:

iput-boolean v0, p0, Lcom/android/thememanager/util/ThemeOperationHandler;->mIsTrialApply:Z

Diatasnya tambahkan:

const/4 v0, 0x0

Cari:

.method public onTrialEventPerformed()V

Kemudian cari:

const-string v0, "trial_download"

Diatasnya tambahkan (Pastikan v0 bernilai 0x0):

iput-boolean v0, p0, Lcom/android/thememanager/util/ThemeOperationHandler;->mIsTrialApply:Z


Buka ./com/android/thememanager/util/ThemeOperationHandler$CheckRightsTask.smali

Cari:

.method protected onPostExecute(Lmiui/drm/DrmManager$DrmResult;)V

Kemudian cari:

iget-boolean v0, v0, Lcom/android/thememanager/util/ThemeOperationHandler;->mIsTrialApply:Z

Dibawahnya tambahkan:

const/4 v0, 0x0


Buka ./com/android/thememanager/util/UIHelper.smali

Cari:

.method public static supportLocalContent(Ljava/lang/String;)Z

Kemudian cari:

return v0

Diatasnya tambahkan:

const/4 v0, 0x1

Cari:

.method public static supportOnlineContent(Ljava/lang/String;)Z

Kemudian cari:

return v0

Diatasnya tambahkan:

const/4 v0, 0x1
  • Recompile ThemeManager.apk


Modding Bagian 3: Membuat flashable zip
  • Setelah selesai memodifikasi miuisystem dan ThemeManager, jika menggunakan apktool, pastikan kamu menyalin Folder META-INF dan Manifest.xml dari apk asli ke apk hasil modifikasi.
  • Jika menggunakan apktool, salin classes.dex dari ThemeManager.apk hasil modif ke dalam ThemeManager.apk yang belum dimodif. Yang kita butuhkan hanya classes.dex hasil modif.
  • Download flashable zip kosong ini, lalu salin miuisystem dan ThemeManager ketempatnya masing-masing.
  • Pasang flashable zip lewat TWRP.
  • Selesai.


Mod Theme Manager & MIUI System, dari ROM Global 8.5.3.0: Download
Module Magisk Theme Manager Mod ROM Global 8.5.3.0 : Download
Stock Theme Manager & MIUI System, dari ROM Global 8.5.3.0: Download

Screenshot:
thememanager

thememanager

thememanager

thememanager


Demikian artikel ini dibuat, segala resiko dan kerugian akibat mod ini bukan tanggung jawab penulis.
Pastikan kamu membuat backup sebelum memodifikasi file system. Semoga bermanfaat. Terima kasih atas kunjungannya. 





Cara menampilkan Home Screen Lyric di MIUI 8

bamzzz 7:22 AM 3 Comments
Langsung saja kita simak cara menampilkan opsi untuk menampilan homescreen lirik di aplikasi musik bawaan MIUI 8.

lyric-miui8


Syarat:
  • Sudah di Root
  • Deodex
  • Mengerti DC/RC Apk
  • Backup!

Peralatan:

Caranya:
  • Salin ./system/priv-app/Music/Music.apk ke /sdcard, jangan lupa backup apk asli.
  • Buka ./com/miui/player/service/DesktopLyricService.smali
Cari:

.method static constructor <clinit>()V

Lalu cari:

const/4 v0, 0x0

Ubah menjadi:

const/4 v0, 0x1

Preview sebelum di modif:

.method static constructor <clinit>()V
.locals 1

.prologue
.line 43
sget-boolean v0, Lcom/xiaomi/music/util/Build;->IS_INTERNATIONAL_BUILD:Z

if-nez v0, :cond_0

const/4 v0, 0x1

:goto_0
sput-boolean v0, Lcom/miui/player/service/DesktopLyricService;->sEnableDesktopLyric:Z

return-void

:cond_0
const/4 v0, 0x0

goto :goto_0
.end method

Preview sesudah di modif:

.method static constructor <clinit>()V
.locals 1

.prologue
.line 43
sget-boolean v0, Lcom/xiaomi/music/util/Build;->IS_INTERNATIONAL_BUILD:Z

if-nez v0, :cond_0

const/4 v0, 0x1

:goto_0
sput-boolean v0, Lcom/miui/player/service/DesktopLyricService;->sEnableDesktopLyric:Z

return-void

:cond_0
const/4 v0, 0x1

goto :goto_0
.end method
  • Recompile Music.apk
  • Salin kembali Music.apk ke ./system/priv-app/Music/Music.apk
  • Set permission rw-r--r--
  • Selesai

MOD Music Player - ROM Global 8.5.3.0: Download (Pasang lewat TWRP)
MOD Magisk Module Music Player - ROM Global 8.5.3.0: Download (Pasang lewat Magisk)
Stock Music.apk - ROM Global 8.5.3.0: Download

Koleksi Lyrics by bamzzz: Download
Isinya lagu-lagu lama band indo, ada juga lirik lagu band luar. Tinggal salin file lirik (*.lrc) yg diinginkan ketempat yang sama dengan file mp3 nya. Samakan juga nama file mp3 dan liriknya.


Sebelum di modif:
lyric-miui8


Sesudah di modif:
lyric-miui8


lyric-miui8

lyric-miui8


Demikianlah tutorial singkat ini dibuat, semoga bermanfaat. Terima kasih.

Cara Menampilkan Fitur Tersembunyi di Kamera MIUI 8

bamzzz 8:32 PM 1 Comment

Seperti halnya ROM di produsen lain, ROM di MIUI khususnya di bagian aplikasi dibangun secara universal, yang artinya ada beberapa fitur yang hanya dikhususkan untuk perangkat tertentu saja, biasanya di kontrol menggunakan suatu konfigurasi file atau melalui "Codename" dari device tersebut, hingga hanya fitur yang ditujukan untuk perangkat tersebut yang tampil.
kamera-miui8
Disini kita akan coba memodifikasi aplikasi Kamera bawaan MIUI 8, mari kita mulai.

Fitur:
  • Mode Square
  • Magic Mirror
  • 4k Camera Recording
  • 1080p Front Camera
  • Support video pause
  • HDR Mode (Off/Auto/Pro/Live)
  • Flash (Off/Auto/On/Torch)
  • Maksimal BurstShoot count dari 20 menjadi 50
  • Slow motion
  • Dan lain-lain.


Syarat & Bahan:

  1. Device sudah di ROOT
  2. APKTool atau MT Manager (use Dex Editor Plus)  disini
  3. Mengerti DC/RC APK
  4. Bahan compare Device.smali


Caranya:

  • Copy MiuiCamera.apk dari /system/priv-app/MiuiCamera/MiuiCamera.apk ke /sdcard
  • Decompile atau buka MiuiCamera.apk (dengan MT Manager).
  • Masuk ke /classes.dex/com/android/camera/Device.smali

Cari method-method dibawah ini:

.method public static adjustScreenLight()Z
Cari: return v0
Tambahkan diatasnya: const/4 v0, 0x1

.method public static getBurstShootCount()I
Cari: const/16 v1, 0x14
Ubah menjadi: const/16 v1, 0x32

.method public static isEffectWatermarkFilted()Z
Cari: return v0
Tambahkan diatasnya: const/4 v0, 0x1

.method public static isFrontVideoQualityShouldBe1080P()Z
Cari: return v0
Tambahkan diatasnya: const/4 v0, 0x1

.method public static isHFRVideoCaptureSupported()Z
Cari: return v0
Tambahkan diatasnya: const/4 v0, 0x1

.method public static isHoldBlurBackground()Z
Cari: return v0
Tambahkan diatasnya: const/4 v0, 0x1

.method public static isLowerEffectSize()Z
Cari: return v0
Tambahkan diatasnya: const/4 v0, 0x1

.method public static isPanoUsePreviewFrame()Z
Cari: return v0
Tambahkan diatasnya: const/4 v0, 0x1

.method public static isSupportBurstDenoise()Z
Cari: return v0
Tambahkan diatasnya: const/4 v0, 0x1

.method public static isSupportFullSizeEffect()Z
Cari: return v0
Tambahkan diatasnya: const/4 v0, 0x1

.method public static isSupportGradienter()Z
Cari: return v0
Tambahkan diatasnya: const/4 v0, 0x1

.method public static isSupportSquare()Z
Cari: return v0
Tambahkan diatasnya: const/4 v0, 0x1

.method public static isSupportedASD()Z
Cari: return v1
Tambahkan diatasnya: const/4 v1, 0x1

.method public static isSupportedAoHDR()Z
Cari: return v0
Tambahkan diatasnya: const/4 v0, 0x1

.method public static isSupportedAsdFlash()Z
Cari: return v1
Tambahkan diatasnya: const/4 v1, 0x1

.method public static isSupportedAsdHdr()Z
Cari: return v1
Tambahkan diatasnya: const/4 v1, 0x1

.method public static isSupportedAsdMotion()Z
Cari: return v1
Tambahkan diatasnya: const/4 v1, 0x1

.method public static isSupportedAsdNight()Z
Cari: return v1
Tambahkan diatasnya: const/4 v1, 0x1

.method public static isSupportedAudioFocus()Z
Cari: return v0
Tambahkan diatasnya: const/4 v0, 0x1

.method public static isSupportedChromaFlash()Z
Cari: return v0
Tambahkan diatasnya: const/4 v0, 0x1

.method public static isSupportedDynamicEffectPopup()Z
Cari: return v0
Tambahkan diatasnya: const/4 v0, 0x1

.method public static isSupportedFaceInfoWaterMark()Z
Cari: return v0
Tambahkan diatasnya: const/4 v0, 0x1

.method public static isSupportedFastCapture()Z
Cari: return v0
Tambahkan diatasnya: const/4 v0, 0x1

.method public static isSupportedHFR()Z
Cari: return v0
Tambahkan diatasnya: const/4 v0, 0x1

.method public static isSupportedIntelligentBeautify()Z
Cari: return v0
Tambahkan diatasnya: const/4 v0, 0x1

.method public static isSupportedLongPressBurst()Z
Cari: return v0
Tambahkan diatasnya: const/4 v0, 0x1

.method public static isSupportedMagicMirror()Z
Cari: return v0
Tambahkan diatasnya: const/4 v0, 0x1

.method public static isSupportedManualFunction()Z
Cari: return v0
Tambahkan diatasnya: const/4 v0, 0x1

.method public static isSupportedMovieSolid()Z
Cari: return v0
Tambahkan diatasnya: const/4 v0, 0x1

.method public static isSupportedMuteCameraSound()Z
Cari: return v0
Tambahkan diatasnya: const/4 v0, 0x1

.method public static isSupportedObjectTrack()Z
Cari: return v0
Tambahkan diatasnya: const/4 v0, 0x1

.method public static isSupportedOpticalZoom()Z
Cari: return v0
Tambahkan diatasnya: const/4 v0, 0x1

.method public static isSupportedPeakingMF()Z
Cari: return v0
Tambahkan diatasnya: const/4 v0, 0x1

.method public static isSupportedPortrait()Z
Cari: return v0
Tambahkan diatasnya: const/4 v0, 0x1

.method public static isSupportedQuickSnap()Z
Cari: return v0
Tambahkan diatasnya: const/4 v0, 0x1

.method public static isSupportedShaderEffect()Z
Cari: return v0
Tambahkan diatasnya: const/4 v0, 0x1

.method public static isSupportedSkinBeautify()Z
Cari: return v0
Tambahkan diatasnya: const/4 v0, 0x1

.method public static isSupportedTiltShift()Z
Cari: return v0
Tambahkan diatasnya: const/4 v0, 0x1

.method public static isSupportedTimeWaterMark()Z
Cari: return v0
Tambahkan diatasnya: const/4 v0, 0x1

.method public static isSupportedTorchCapture()Z
Cari: return v0
Tambahkan diatasnya: const/4 v0, 0x1

.method public static isSupportedVideoPause()Z
Cari: return v0
Tambahkan diatasnya: const/4 v0, 0x1

.method public static isSupportedVideoQuality4kUHD()Z
Cari: return v0
Tambahkan diatasnya: const/4 v0, 0x1

  • Lalu Recompile / Save.
  • Salin kembali MiuiCamera.apk ke /system/priv-app/MiuiCamera/MiuiCamera.apk.
  • Set permission rw-r--r-- (644).
  • Selesai.

NB: Tidak semua fitur yang kita aktifkan diatas berfungsi secara maksimal diperangkat kita.

Tutor Video:


Screenshot:
kamera-miui8

kamera-miui8

kamera-miui8

kamera-miui8

kamera-miui8

kamera-miui8


Sekian artikel dari saya, semoga bermanfaat. Silahkan tinggalkan komentar jika ada yang ingin ditanyakan. Terima kasih.

NB: Untuk non-oprekers, silahkan sedot: MiuiCamera.apk
Salin ke /system/priv-app/MiuiCamera/disini lalu set permission rw-r--r--.

Cara Menampilkan Opsi Font di MIUI 8 Global

bamzzz 5:03 PM Add Comment
Sesuai dengan judulnya, tutorial dibawah ini adalah cara untuk menampilkan pilihan font di "Display Settings" MIUI8.

fonts

Syarat dan Bahan:
  • Ponsel sudah di root
  • Apktool atau MT Manager (Baca disini)
  • Settings.apk (Cari di /system/priv-app/Settings/disini)

Caranya:
  • Salin Settings.apk ke sdcard
  • Decompile /  buka dengan MT Manager
  • Masuk ke classes.dex/com/android/settings/MiuiDisplaySettings.smali
    Cari:

    sget-boolean v0, Lmiui/os/Build;->IS_GLOBAL_BUILD:Z
  • Dibawahnya tambahkan:

    const/4 v0, 0x0
  • Hingga menjadi seperti ini:

    sget-boolean v0, Lmiui/os/Build;->IS_GLOBAL_BUILD:Z

    const/4 v0, 0x0
  • Recompile lalu salin ke ketempatnya. Set permission rw-r--r-- (0644).
  • Selesai.

Screenshot untuk MiuiDisplaySettings.smali:
miuidisplaysettings
MiuiDisplaySettings.smali

Sebelum:
fonts
Sebelum di modif

Sesudah:
fonts
Sesudah di modif


NB: Untuk non-oprekers silahkan download: Settings.apk dari Epic ROM 8.5.3.0
Salin ke ./system/priv-app/Settings/Settings.apk lalu set permission rw-r--r-- (644).

Demikian artikel ini dibuat, semoga bermanfaat. Jika ada pertanyaan silahkan tinggalkan komentar. Terima kasih.