みなさま始めまして。
koro3と申します。
まだAndroid初心者ですが、何卒よろしくお願い致します。
(同じ投稿を「日本Androidの会」でもさせて頂いております)
http://groups.google.com/group/android-group-japan
早速ですが、下記の質問事項について
もし有識者の方がいらっしゃいましたら、
ご教授頂けますよう、よろしくお願い致します。
まだまだ知識が浅いため、
レベルの低い質問をしていたら誠に申し訳ありません。
概要としては、
Nativeのアプリケーションを改造しようとしていますが、
改造したソースがinstallできずに悩んでいます。
下記、状況を整理しましたので、何かお気づきの点等ありましたら
アドバイスいただけますと幸いです。
<目的>
・Nativeアプリ(ContactsProvider)を改修し、
エミュレータ、および、実機にインストールし直す。
※ここでは例として「ContactsProvider」を挙げましたが、
他のNativeアプリも同様にNGでした。
<問題点>
エミュレータ、実機ともに、
Nativeアプリ(ContactsProvider)のアンインストール/インストールがうまくいかない。
<状況>
■エミュレータ
①Eclipseにて入手したContactsProviderのソース改造。
②EclipseのビルドにてContactsProvider.apkを作成。
③Eclipse上にてSDKエミュレータを実行するが、デバッガで追えず。
コンソールでは「Installation error: INSTALL_FAILED_UPDATE_INCOMPATIBLE」と表示。
④adb uninstall com.android.providers.contacts
「Failure」と表示。
⑤adb install C:\ContactsProvider.apk
「Failure [INSTALL_FAILED_UPDATE_INCOMPATIBLE]」と表示。
証明書がどこかに残っていると認識したが
apkがなくなればinstallが成功すると思い
今度は手動にてapkを削除し、installを実行する。
①adb remount
②adb shell rm /system/app/ContactsProvider.apk
③adb install C:\ContactsProvider.apk
「Failure [INSTALL_FAILED_UPDATE_INCOMPATIBLE]」と表示。
下記サイトを参考に、一度エミュレータのデータを削除。
http://magpad.jugem.jp/?eid=18
①emulator -wipe-data
③adb install C:\ContactsProvider.apk
「Failure [INSTALL_FAILED_UPDATE_INCOMPATIBLE]」と表示。
Nativeアプリでは、install/unistallコマンドが使用できないという話を小耳に挟み
今度はpushにて直接apkの入替えを試す。
①adb remount
②adb shell mv /system/app/ContactsProvider.apk /system/app/
ContactsProvider.apk.bak
③adb push C:\ContactsProvider.apk /system/app
④動作確認のため、ContactsProviderを使用している
アドレス帳アプリ(contact)を起動しようとするが、起動しない。
logcatでは「E/ActivityThread( 707): Failed to find provider info for
contacts」と表示。
⑤SDKエミュレータ再起動。
Androidの起動が完了せず、ランチャーが表示しない。
■実機
エミュレータではADTがSDK1.5に対応しきれてておらず、
Nativeの入れ替えはできないのかな?と思い、
今度は実機にてアンインストール/インストールを試す。
あわせてdexの入替えも試す。
①adb rm /system/app/ContactsProvider.apk
②adb rm /data/dalvik-cache/system@app@ContactsPr...@classes.dex
③adb push C:\workspace\ContactsProvider\bin\ContactsProvider.apk /
system/app
④adb push C:\workspace\ContactsProvider\bin\classes.dex /data/dalvik-
cache/system@app@ContactsPr...@classes.dex
⑤kill XXX (XXX=servicemanagerのPID(psコマンドで確認))
or(adb shell busybox killall servicemanager)
サービスを再起動させて、改造したapkでプロセスが立ち上がるように手を加える。
⑥動作確認するが、改造したapkの内容が動作に反映されていない。
rmで存在しないはずのapkの動きをしている。
なお、②の後にapkファイル自体は存在していないが、
⑤のサービスをkillして「pm list packages」を叩いても、
「com.android.providers.contacts」が残ってしまっている。
つまり、nativeのアプリは物理的にapkを消してサービス再起動するだけでは
削除されていないのかな?と感じております。
このあと、どうやったらnativeアプリの入れ替えが出来るのか、
というところで、八方塞がりの状態となってしまい困り果てております。
どなたか解析方法のヒントでも良いのでアドバイスを頂けますよう、
お願い致します。
<開発環境>
android-SDK:android-sdk-windows-1.5_r2
java:1.6.0_13
eclipse :Version3.4.2
OS:WindowsXP Pro 2002 SP3
<実機環境>
android-SDK:android-sdk-windows-1.5_r2
事情により公表できませんが、
SDK1.5にてポーティングしてある携帯端末です。
長文となってしまい申し訳ございません。
以上、よろしくお願い致します。