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:
- Rooted
- Deodexed ROM
- Sudah "Disable Signature Verification" Baca: Disable Signature Verification di ROM Android Termasuk MIUI
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
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
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
- Salin file lib ke dalam folder /system/lib64/
- Set seluruh permission filenya menjadi rw-r--r-- (0644)
- Salin MiuiSettings.apk dan MiuiKeyguard ke tampatnya masing-masing, set permission file menjadi rw-r--r-- (0644).
- Reboot System
- 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:
Demikianlah artikel ini dibuat, semoga bermanfaat. Apabila ada pertanyan silahkan tinggalkan komentar.
Hasil compare MiuiKeyguard dari ROM Kenzo vs ROM Jason:
Referensi: MIUI Forum | Mi Note 3 ROM | MIUIPRO


























