首先必須要有編譯反編譯的基礎.
由於基本上原廠 rom 都是 odex 的, 所以也必須要 deodex.
如何 deodex 和 odex , 可以參考以下文章.
如何 deodex stock rom 的 apk 檔案.
如何關閉相機聲音可以參考此篇
LG G2 韓版 - 如何開啟相機無聲的選項 for Kitkat
下面是如何把錄影啟動和停止聲音關閉 (這個關閉後除非在修改, 否則沒辦法透過選項再開啟喔)
com/lge/camera/controller/SoundController.smali
.method public playRecordingSound(Z)V
.locals 3
.parameter "start"
.prologue
.line 632
const-string v0, "CameraApp"
new-instance v1, Ljava/lang/StringBuilder;
invoke-direct {v1}, Ljava/lang/StringBuilder;->()V
const-string v2, "playRecordingSound : start = "
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v1
invoke-virtual {v1, p1}, Ljava/lang/StringBuilder;->append(Z)Ljava/lang/StringBuilder;
move-result-object v1
invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v1
invoke-static {v0, v1}, Lcom/lge/camera/util/CamLog;->d(Ljava/lang/String;Ljava/lang/String;)V
.line 634
iget-object v0, p0, Lcom/lge/camera/controller/SoundController;->mGet:Lcom/lge/camera/ControllerFunction;
invoke-interface {v0}, Lcom/lge/camera/ControllerFunction;->getApplicationMode()I
move-result v0
if-nez v0, :cond_1
iget-object v0, p0, Lcom/lge/camera/controller/SoundController;->mGet:Lcom/lge/camera/ControllerFunction;
const-string v1, "key_camera_shot_mode"
invoke-interface {v0, v1}, Lcom/lge/camera/ControllerFunction;->getSettingValue(Ljava/lang/String;)Ljava/lang/String;
move-result-object v0
const-string v1, "shotmode_panorama"
invoke-virtual {v0, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v0
if-nez v0, :cond_0
iget-object v0, p0, Lcom/lge/camera/controller/SoundController;->mGet:Lcom/lge/camera/ControllerFunction;
const-string v1, "key_camera_shot_mode"
invoke-interface {v0, v1}, Lcom/lge/camera/ControllerFunction;->getSettingValue(Ljava/lang/String;)Ljava/lang/String;
move-result-object v0
const-string v1, "shotmode_plane_panorama"
invoke-virtual {v0, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v0
if-nez v0, :cond_0
iget-object v0, p0, Lcom/lge/camera/controller/SoundController;->mGet:Lcom/lge/camera/ControllerFunction;
const-string v1, "key_camera_shot_mode"
invoke-interface {v0, v1}, Lcom/lge/camera/ControllerFunction;->getSettingValue(Ljava/lang/String;)Ljava/lang/String;
move-result-object v0
const-string v1, "shotmode_free_panorama"
invoke-virtual {v0, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v0
if-eqz v0, :cond_1
:cond_0
invoke-static {}, Lcom/lge/camera/properties/ShutterSoundProperties;->isSupportShutterSoundOff()Z
move-result v0
if-eqz v0, :cond_1
const-string v0, "off"
iget-object v1, p0, Lcom/lge/camera/controller/SoundController;->mGet:Lcom/lge/camera/ControllerFunction;
const-string v2, "key_camera_shutter_sound"
invoke-interface {v1, v2}, Lcom/lge/camera/ControllerFunction;->getSettingValue(Ljava/lang/String;)Ljava/lang/String;
move-result-object v1
invoke-virtual {v0, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v0
if-eqz v0, :cond_1
.line 649
:goto_0
return-void
.line 644
:cond_1
if-eqz p1, :cond_2
.line 645
iget v0, p0, Lcom/lge/camera/controller/SoundController;->mSound_startRecording:I
#invoke-virtual {p0, v0}, Lcom/lge/camera/controller/SoundController;->soundPlay(I)V
goto :goto_0
.line 647
:cond_2
iget v0, p0, Lcom/lge/camera/controller/SoundController;->mSound_stopRecording:I
#invoke-virtual {p0, v0}, Lcom/lge/camera/controller/SoundController;->soundPlay(I)V
goto :goto_0
.end method
如上, 把有 soundPlay(I)V 的部份最前面加上 #, 這樣就不會有聲音了.
不過我個人是不太喜歡按下去完全沒有錄影開始的感覺就是了.