갤포 펌웨어가 MF3로 업데이트되면서 이전대로 feature.xml 수정을 통해 ShutterSoundMenu를 활성화시킬 경우
카메라에서 촬영음 토글이 활성화되긴하지만, '꺼짐'을 선택할 수가 없어 무음 설정이 불가능해졌습니다.
카메라가 대폭 수정되면서 셔터음메뉴 부분이 설정할 수 없게 건드려져 있더군요.
이 문제를 해결하기 위해서는 ME7펌의 카메라 파일을 넣어주는 방법도 있겠지만,
그렇게 할 경우 업데이트가 되지 않은 예전 카메라를 사용하게 되는 것이기 때문에
MF3펌 카메라의 dex 수정을 통해 무음 설정이 가능하도록 바꿔주는 방법을 써보겠습니다.
셔터음메뉴 부분만 예전과 같은 코드로 바꿔주면 되는 작업입니다.
디오덱스/오덱스나 baksmaling/smaling 과정은 강좌가 많이 있기 때문에 생략하겠습니다.
---
1) 디오덱스된 SamsungCamera2.apk에서 classes.dex를 추출하여 baksmali 해줍니다.
2) com/sec/android/app/camera/CameraSettings.smali를 편집기로 열어줍니다.
3) .method public getCameraShutterSound()I 를 검색한 다음, 해당 메서드함수 전체를 아래의 코드로 교체해줍니다.
.method public getCameraShutterSound()I.registers 4.prologueiget-object v0, p0, Lcom/sec/android/app/camera/CameraSettings;->mActivityContext:Lcom/sec/android/app/camera/Camera;invoke-virtual {v0}, Lcom/sec/android/app/camera/Camera;->isCalling()Zmove-result v0if-eqz v0, :cond_aconst/4 v0, 0x0:goto_9return v0:cond_ainvoke-virtual {p0}, Lcom/sec/android/app/camera/CameraSettings;->getPreferences()Lcom/sec/android/app/camera/ComboPreferences;move-result-object v0const-string v1, "pref_camera_shuttersound_key"const/4 v2, 0x1invoke-virtual {v0, v1, v2}, Lcom/sec/android/app/camera/ComboPreferences;->getInt(Ljava/lang/String;I)Imove-result v0goto :goto_9.end method
(apktool이나 apkmanager를 사용하여 디컴파일했을 경우 위 코드에서 registers 4를 locals 3으로 바꿔주세요.)
4) .method public setCameraShutterSound(I)V 를 검색한 다음 마찬가지로 메서드 전체를 아래의 코드로 교체해줍니다.
.method public setCameraShutterSound(I)V.registers 6.parameter "shuttersound".prologueinvoke-virtual {p0}, Lcom/sec/android/app/camera/CameraSettings;->getPreferences()Lcom/sec/android/app/camera/ComboPreferences;move-result-object v1const-string v2, "pref_camera_shuttersound_key"const/4 v3, 0x1invoke-virtual {v1, v2, v3}, Lcom/sec/android/app/camera/ComboPreferences;->getInt(Ljava/lang/String;I)Imove-result v1iput v1, p0, Lcom/sec/android/app/camera/CameraSettings;->mShutterSound:Iiget v1, p0, Lcom/sec/android/app/camera/CameraSettings;->mShutterSound:Iif-eq v1, p1, :cond_42const-string v1, "CameraSettings"new-instance v2, Ljava/lang/StringBuilder;invoke-direct {v2}, Ljava/lang/StringBuilder;->()V const-string v3, "setCameraShutterSound "invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;move-result-object v2invoke-virtual {v2, p1}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;move-result-object v2invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;move-result-object v2invoke-static {v1, v2}, Landroid/util/Log;->secV(Ljava/lang/String;Ljava/lang/String;)Iiput p1, p0, Lcom/sec/android/app/camera/CameraSettings;->mShutterSound:Iinvoke-virtual {p0}, Lcom/sec/android/app/camera/CameraSettings;->getPreferences()Lcom/sec/android/app/camera/ComboPreferences;move-result-object v1invoke-virtual {v1}, Lcom/sec/android/app/camera/ComboPreferences;->edit()Landroid/content/SharedPreferences$Editor;move-result-object v0.local v0, editor:Landroid/content/SharedPreferences$Editor;const-string v1, "pref_camera_shuttersound_key"iget v2, p0, Lcom/sec/android/app/camera/CameraSettings;->mShutterSound:Iinvoke-interface {v0, v1, v2}, Landroid/content/SharedPreferences$Editor;->putInt(Ljava/lang/String;I)Landroid/content/SharedPreferences$Editor;invoke-interface {v0}, Landroid/content/SharedPreferences$Editor;->apply()Vconst/16 v1, 0x15invoke-virtual {p0, v1, p1}, Lcom/sec/android/app/camera/CameraSettings;->notifyCameraSettingsChanged(II)V.end local v0 #editor:Landroid/content/SharedPreferences$Editor;:cond_42return-void.end method
(마찬가지로 apktool이나 apkmanager를 사용하여 디컴파일했을 경우 위 코드에서 registers 6를 locals 4로 바꿔주세요.)
코드 수정은 여기까지고,
이제 소스를 다시 classes.dex로 컴파일해준 다음, SamsungCamera2.apk에 넣어주면 끝입니다.
---
앞으로 있을 업뎃에서도 마찬가지로 셔터음 설정이 안된다면 계속 이 방법으로 수정해주면 되겠죠..
직접 수정하기 어려우신 분들을 위해 MF3펌의 카메라를 수정한 파일 첨부해두겠습니다.
첨부파일은 오덱스용과 디오덱스용, 두가지입니다.