韓国版のGalaxy S4 LTE-A(shv-e330s、SKテレコム版)の無音カメラアプリ(deodex版)とodexファイルの作成方法の覚書です。
カメラアプリの設定メニューにシャッター音のOn/Offオプションを追加します。
韓国版のGalaxy S4 LTE-Aのカメラはbild.propとfeature.xmlを編集しただけでは無音になりません。(カメラアプリの設定メニューにシャッター音のOn/Offオプションは表示されますが、Offを選択出来ません。)
Galaxy S4のカメラアプリの設定メニューにシャッター音のOn/Off項目を追加(韓国版では機能せず)
http://galaxy-shw-m110s.blogspot.kr/2013/07/galaxy-s4ooff.html
On/Offせずに、常に無音でよいのでしたら、アプリを解凍して音源ファイルを無音ファイルに差し替える方法で無音化出来ます。
Galaxy S4のカメラの無音化(ESファイルエクスプローラー使用)
http://galaxy-shw-m110s.blogspot.kr/2013/05/galaxy-s4_2.html
【全体の流れ】
・必要なファイルの準備
・odexファイルを展開・編集
・classes.dexを作成
・deodexファイルを作成
・odexファイルを作成(オプション)
【準備】
まず、必要な物を用意します。
JAVAはインストールされている前提です。
Java SE ダウンロード
http://www.oracle.com/technetwork/jp/java/javase/downloads/index.html
1)作業用フォルダ
任意のフォルダで構いませんが、今回は/desktop/deodex/というフォルダを作業用に用意しました。
2)アセンブラと逆アセンブラ
An assembler/disassembler for Android's dex format
https://code.google.com/p/smali/
上記のページから以下のファイルをダウンロードして作業用フォルダに保存します。
baksmali
smali
baksmali-2.0.jar
smali-2.0.jar
baksmali-2.0.jarとsmali-2.0.jarはbaksmali.jarとsmali.jarにリネームしておきます。
3)7Z
以下から7Zをダウンロードして、解凍し、作業用フォルダに置きます。
7z002.lzh
http://madobe.net/archiver/app/dosp/7z.html
4)カメラアプリとodexファイル
端末から以下の2つのファイルを抜き出して作業用フォルダ内に置きます。
PCの任意のフォルダにもバックアップとしても保存しておくことをお勧めします。
/system/app/SamsungCamera2.apk
/sustem/app/SamsungCamera2.odex
これらのファイルは、SDKを使ってPCにpullしてもよいのですが、ESファイルエクスプローラ等でコピーして端末の/sdcard/に置き、そこからケーブルやクラウドを介してPCにコピーしてもよいでしょう。
5)/system/framework/の中身
端末の/system/framework/の中身全てを作業用フォルダにコピーします。
それぞれのファイルのサイズは小さく、全体で90MB程しかありませんが、当方の環境では154個のファイルがありました。
ファイル数が多いので、今回は、作業用フォルダの中に/system/framework/というフォルダを作り、その中に入れました。
6)feature.xmlの編集
ESファイルエクスプローラー等を利用して、端末の下記のファイルを編集しておきます。
/system/csc/feature.xml
ESファイルエクスプローラー
https://www.do.global/zh_CN/product/
変更する箇所は以下です。
FeatureSet/CSCFeature/Camera_ShutterSoundMenu ; false => true
【deodexファイルの作成】
1)odexファイルの展開
コマンドプロンプトから作業用フォルダに入り、以下を実行します。
PCのエクスプローラで作業用フォルダを開き、Shift+右クリックから「コマンドウインドウをここで開く」を選択するとよいでしょう。
java -jar baksmali.jar -d system/framework -x SamsungCamera2.odex -o test
作業用フォルダ内の/test/にファイルが展開されますので、コマンドプロンプトは開いたままにして、次の作業に移ります。
2)設定ファイルの編集
以下のファイルをメモ帳等にドラッグして開きます。
/test/com/sec/android/app/camera/CameraSettings.smali
下記を検索し、その部分を添付内容に置き換えます。
.method public getCameraShutterSound()I
同様に、下記部分を置き換えます。
.method public setCameraShutterSound(I)V
なお、上記差し替え分はAndroid 4.3 MJ7用です。同じ機種でもOSのバージョンの違いによって正常に機能しない可能性がありますので注意してください。
3)classes.dexの作成
作業用フォルダでコマンドプロンプトから下記を実行します。
java -jar smali.jar test -o classes.dex
以下のファイルが作成されます。
classes.dex
4)deodex化
作業用フォルダでコマンドプロンプトから下記を実行します。
7z a -tzip SamsungCamera2.apk classes.dex
作業用フォルダ内のSamsungCamera2.apkが更新されます。
更新されたファイルは、odexファイルを取り込んだ物(deodex)になりますので、端末の/system/app/SamsungCamera2.apkに上書きすれば、無音カメラアプリとして使えますが、カメラアプリ自体を差し替えずにodexファイルだけを差し替えたい場合は、以下の作業を行ってください。
【odexファイルの作成】(オプション)
ここから先はSDKが使える環境になっている事が前提です。
1)dexopt-wrapper入手
以下のサイトからdexopt-wrapperをダウンロードして解凍し、端末の/data/local/tmp/に置きます。
http://forum.xda-developers.com/showpost.php?p=3864655&postcount=36
以下の様にSDKからpushしても良いですし、ESファイルエクスプローラー等を使っても構いません。
adb push dexopt-wrapper /data/local/tmp/
同様に、作成したdeodexファイル(SamsungCamera2.apk)も/data/local/tmp/に置きます。
2)odexファイルの作成
adbから下記を実行します。
adb shell chmod 755 /data/local/tmp/dexopt-wrapper
adb shell
cd /data/local/tmp
./dexopt-wrapper SamsungCamera2.apk SamsungCamera2.odex
busybox dd if=/system/app/SamsungCamera2.odex of=SamsungCamera.odex bs=1 count=20 skip=52 seek=52 conv=notrunc
/data/local/tmp/にSamsungCamera.odexが作成されますので、これを/system/app/SamsungCamera.odexに上書きします。
以上で無音化は終了ですが、この手法は工数が多いので、常に無音でよいのでしたら、冒頭で紹介したアプリの音源ファイルを差し替える方が手軽でよいかと思います。
最新の機種については下記をご参照ください。
Galaxy Note 9(SM-N960F/DS)のカメラの無音化
https://galaxy-shw-m110s.blogspot.com/2018/12/galaxy-note-9sm-n960fds_22.html
Galaxy S4のカメラアプリの設定メニューにシャッター音のOn/Off項目を追加(韓国版では機能せず)
http://galaxy-shw-m110s.blogspot.kr/2013/07/galaxy-s4ooff.html
On/Offせずに、常に無音でよいのでしたら、アプリを解凍して音源ファイルを無音ファイルに差し替える方法で無音化出来ます。
Galaxy S4のカメラの無音化(ESファイルエクスプローラー使用)
http://galaxy-shw-m110s.blogspot.kr/2013/05/galaxy-s4_2.html
【全体の流れ】
・必要なファイルの準備
・odexファイルを展開・編集
・classes.dexを作成
・deodexファイルを作成
・odexファイルを作成(オプション)
【準備】
まず、必要な物を用意します。
JAVAはインストールされている前提です。
Java SE ダウンロード
http://www.oracle.com/technetwork/jp/java/javase/downloads/index.html
1)作業用フォルダ
任意のフォルダで構いませんが、今回は/desktop/deodex/というフォルダを作業用に用意しました。
2)アセンブラと逆アセンブラ
An assembler/disassembler for Android's dex format
https://code.google.com/p/smali/
上記のページから以下のファイルをダウンロードして作業用フォルダに保存します。
baksmali
smali
baksmali-2.0.jar
smali-2.0.jar
baksmali-2.0.jarとsmali-2.0.jarはbaksmali.jarとsmali.jarにリネームしておきます。
3)7Z
以下から7Zをダウンロードして、解凍し、作業用フォルダに置きます。
7z002.lzh
http://madobe.net/archiver/app/dosp/7z.html
4)カメラアプリとodexファイル
端末から以下の2つのファイルを抜き出して作業用フォルダ内に置きます。
PCの任意のフォルダにもバックアップとしても保存しておくことをお勧めします。
/system/app/SamsungCamera2.apk
/sustem/app/SamsungCamera2.odex
これらのファイルは、SDKを使ってPCにpullしてもよいのですが、ESファイルエクスプローラ等でコピーして端末の/sdcard/に置き、そこからケーブルやクラウドを介してPCにコピーしてもよいでしょう。
5)/system/framework/の中身
端末の/system/framework/の中身全てを作業用フォルダにコピーします。
それぞれのファイルのサイズは小さく、全体で90MB程しかありませんが、当方の環境では154個のファイルがありました。
ファイル数が多いので、今回は、作業用フォルダの中に/system/framework/というフォルダを作り、その中に入れました。
6)feature.xmlの編集
ESファイルエクスプローラー等を利用して、端末の下記のファイルを編集しておきます。
/system/csc/feature.xml
ESファイルエクスプローラー
https://www.do.global/zh_CN/product/
変更する箇所は以下です。
FeatureSet/CSCFeature/Camera_ShutterSoundMenu ; false => true
【deodexファイルの作成】
1)odexファイルの展開
コマンドプロンプトから作業用フォルダに入り、以下を実行します。
PCのエクスプローラで作業用フォルダを開き、Shift+右クリックから「コマンドウインドウをここで開く」を選択するとよいでしょう。
java -jar baksmali.jar -d system/framework -x SamsungCamera2.odex -o test
作業用フォルダ内の/test/にファイルが展開されますので、コマンドプロンプトは開いたままにして、次の作業に移ります。
2)設定ファイルの編集
以下のファイルをメモ帳等にドラッグして開きます。
/test/com/sec/android/app/camera/CameraSettings.smali
下記を検索し、その部分を添付内容に置き換えます。
.method public getCameraShutterSound()I
.method public getCameraShutterSound()I .registers 4 .prologue iget-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()Z move-result v0 if-eqz v0, :cond_a const/4 v0, 0x0 :goto_9 return v0 :cond_a invoke-virtual {p0}, Lcom/sec/android/app/camera/CameraSettings;->getPreferences()Lcom/sec/android/app/camera/ComboPreferences; move-result-object v0 const-string v1, "pref_camera_shuttersound_key" const/4 v2, 0x1 invoke-virtual {v0, v1, v2}, Lcom/sec/android/app/camera/ComboPreferences;->getInt(Ljava/lang/String;I)I move-result v0 goto :goto_9 .end method
同様に、下記部分を置き換えます。
.method public setCameraShutterSound(I)V
.method public setCameraShutterSound(I)V .registers 6 .param p1, "shuttersound" # I .prologue invoke-virtual {p0}, Lcom/sec/android/app/camera/CameraSettings;->getPreferences()Lcom/sec/android/app/camera/ComboPreferences; move-result-object v1 const-string v2, "pref_camera_shuttersound_key" const/4 v3, 0x1 invoke-virtual {v1, v2, v3}, Lcom/sec/android/app/camera/ComboPreferences;->getInt(Ljava/lang/String;I)I move-result v1 iput v1, p0, Lcom/sec/android/app/camera/CameraSettings;->mShutterSound:I iget v1, p0, Lcom/sec/android/app/camera/CameraSettings;->mShutterSound:I if-eq v1, p1, :cond_42 const-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 v2 invoke-virtual {v2, p1}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder; move-result-object v2 invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; move-result-object v2 invoke-static {v1, v2}, Landroid/util/Log;->secV(Ljava/lang/String;Ljava/lang/String;)I iput p1, p0, Lcom/sec/android/app/camera/CameraSettings;->mShutterSound:I invoke-virtual {p0}, Lcom/sec/android/app/camera/CameraSettings;->getPreferences()Lcom/sec/android/app/camera/ComboPreferences; move-result-object v1 invoke-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:I invoke-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()V const/16 v1, 0x15 invoke-virtual {p0, v1, p1}, Lcom/sec/android/app/camera/CameraSettings;->notifyCameraSettingsChanged(II)V .end local v0 # "editor":Landroid/content/SharedPreferences$Editor; :cond_42 return-void .end method
なお、上記差し替え分はAndroid 4.3 MJ7用です。同じ機種でもOSのバージョンの違いによって正常に機能しない可能性がありますので注意してください。
3)classes.dexの作成
作業用フォルダでコマンドプロンプトから下記を実行します。
java -jar smali.jar test -o classes.dex
以下のファイルが作成されます。
classes.dex
4)deodex化
作業用フォルダでコマンドプロンプトから下記を実行します。
7z a -tzip SamsungCamera2.apk classes.dex
作業用フォルダ内のSamsungCamera2.apkが更新されます。
更新されたファイルは、odexファイルを取り込んだ物(deodex)になりますので、端末の/system/app/SamsungCamera2.apkに上書きすれば、無音カメラアプリとして使えますが、カメラアプリ自体を差し替えずにodexファイルだけを差し替えたい場合は、以下の作業を行ってください。
【odexファイルの作成】(オプション)
ここから先はSDKが使える環境になっている事が前提です。
1)dexopt-wrapper入手
以下のサイトからdexopt-wrapperをダウンロードして解凍し、端末の/data/local/tmp/に置きます。
http://forum.xda-developers.com/showpost.php?p=3864655&postcount=36
以下の様にSDKからpushしても良いですし、ESファイルエクスプローラー等を使っても構いません。
adb push dexopt-wrapper /data/local/tmp/
同様に、作成したdeodexファイル(SamsungCamera2.apk)も/data/local/tmp/に置きます。
2)odexファイルの作成
adbから下記を実行します。
adb shell chmod 755 /data/local/tmp/dexopt-wrapper
adb shell
cd /data/local/tmp
./dexopt-wrapper SamsungCamera2.apk SamsungCamera2.odex
busybox dd if=/system/app/SamsungCamera2.odex of=SamsungCamera.odex bs=1 count=20 skip=52 seek=52 conv=notrunc
/data/local/tmp/にSamsungCamera.odexが作成されますので、これを/system/app/SamsungCamera.odexに上書きします。
以上で無音化は終了ですが、この手法は工数が多いので、常に無音でよいのでしたら、冒頭で紹介したアプリの音源ファイルを差し替える方が手軽でよいかと思います。
最新の機種については下記をご参照ください。
Galaxy Note 9(SM-N960F/DS)のカメラの無音化
https://galaxy-shw-m110s.blogspot.com/2018/12/galaxy-note-9sm-n960fds_22.html
0 件のコメント:
コメントを投稿