TARGET_BUILD_VARIANTをengからuserモードにするとアプリが起動できなくなる

1,229 views
Skip to first unread message

nina

unread,
Jan 19, 2011, 11:05:33 PM1/19/11
to 日本Androidの会
お世話になっております。ninaと申します。
以前、下記の件で質問させて頂いたのですが、その続きの質問となります。
宜しくお願い致します。

jarとsoファイルを使用したアプリをプリインアプリとして組-み込む方法
https://groups.google.com/group/android-group-japan/browse_frm/thread/8eb8d1b0140f41e7?hl=ja#

上記の件ですが、TARGET_BUILD_VARIANTをuserモードにして開発を進めておりましたが、
engモードにしてビルドすると、正常にアプリが起動するようになりました。
ログも参照してみましたが、エラーも特に発生しなくなりました。

しかしながら、正式にリリースする場合、TARGET_BUILD_VARIANTをuserモードにしなければなりませんので、
現在原因を究明中です。
userモードでビルドすると、相変わらず以下のエラーが発生し、アプリが起動できません。
----------
DEBUG/dalvikvm(1464): GetMethodID: method not
found: Lcom/xxxx/xxx/xxxx/xxxxx;.init:(Ljava/lang/String;ILjava/lang/
String;Ljava/lang/String;)Lcom/xxxx/xxx/xxxx/xxxxx;
----------


また、前回の質問時からの差分としては、アプリのAndroid.mkを若干変更しております。
アプリの構成は特に変えておらず、/system配下にプリインアプリとして組み込んでおります。
----------
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := $(call all-java-files-under, src)
LOCAL_PACKAGE_NAME := TestApp
LOCAL_JNI_SHARED_LIBRARIES := libabc
LOCAL_STATIC_JAVA_LIBRARIES := libaaa
LOCAL_CERTIFICATE := platform
LOCAL_ASSET_FILES := $(call find-subdir-assets, assets)
include $(BUILD_PACKAGE)
##################################################
include $(CLEAR_VARS)
LOCAL_PREBUILT_LIBS := libs/armeabi/libabc.so
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := libaaa:jars/aaa.jar
include $(BUILD_MULTI_PREBUILT)
include $(call all-makefiles-under, $(LOCAL_PATH))
----------


私がこれまでに調査した方法は、以下の通りです。
※動作確認は自社のブレッドボードを使用

①build.propの以下2行をuserモードでビルドした環境にadb pushし動作確認。
"ro.kernel.android.checkjni=1"
"ro.setupwizard.mode=OPTIONAL"
→動作に変わり無し。
 ※"ro.secure=0"はこれから試す予定
② ①のbuild.propをadb pushからではなく、main.mkの変更し、userモードにも適用する形でビルドし、動作確認。
→動作に変わり無し。
③userdebugモードでビルドし、動作確認。
→動作に変わり無し。

調査の観点としましては、engモードとuserモードではbuild.propにセットされる変数に差分があるため、
userモードでビルドした環境に、engモードでセットされる変数を適用した場合の動作を調べています。
・・・が、いずれも動作には変わりありませんでした。

今後の調査としては、出ているログがJNIのエラー内容ですので、jni.cにログ埋め込みで
ソースから辿っていく予定です。

何か情報をお持ちの方は、ご教示頂けませんでしょうか?
宜しくお願い致します。

l.b.

unread,
Jan 20, 2011, 11:38:01 AM1/20/11
to 日本Androidの会

 村上です。

 私も似たような状況で数日前に嵌りました。

 (多分)Eclar以降、TARGET_BUILD_VARIANTがuserの時には(そして未確認ですがuserdebugの時も)、ビルド時に
AndroidFramework全体に対してProguard(http://proguard.sourceforge.net/)が実行されるよ
うになっています。

 で、Proguardは使われていないJavaクラスやメソッドを削除してしまいます。
 リフレクションで呼び出しているメソッドは直接他のクラス・メソッドから呼び出されていないためにProguardによって削除され、結果クラスファ
イルにメソッドのシンボルが無くなってエラーが発生したものと思われます。

 対処としては、削除されるメソッドを他から直接呼び出すようにするか、
http://android.git.kernel.org/?p=platform/packages/apps/Contacts.git;a=blob_plain;f=proguard.flags;hb=HEAD
にあるようにProguardの除外設定をするかとなります。

 では。

On 1月20日, 午後1:05, nina <sawata.har...@gmail.com> wrote:
> お世話になっております。ninaと申します。
> 以前、下記の件で質問させて頂いたのですが、その続きの質問となります。
> 宜しくお願い致します。
>
> jarとsoファイルを使用したアプリをプリインアプリとして組-み込む方法https://groups.google.com/group/android-group-japan/browse_frm/thread...

nina

unread,
Jan 26, 2011, 9:56:43 PM1/26/11
to 日本Androidの会
村上さん

ninaです。ご回答頂きありがとうございました。

無事、ProGuardの除外設定をすることで解決致しました。
本当にありがとうございました。
また何かありましたら、宜しくお願い致します。


On 1月21日, 午前1:38, "l.b." <hideaki.murak...@gmail.com> wrote:
>  村上です。
>
>  私も似たような状況で数日前に嵌りました。
>
>  (多分)Eclar以降、TARGET_BUILD_VARIANTがuserの時には(そして未確認ですがuserdebugの時も)、ビルド時に
> AndroidFramework全体に対してProguard(http://proguard.sourceforge.net/)が実行されるよ
> うになっています。
>
>  で、Proguardは使われていないJavaクラスやメソッドを削除してしまいます。
>  リフレクションで呼び出しているメソッドは直接他のクラス・メソッドから呼び出されていないためにProguardによって削除され、結果クラスファ
> イルにメソッドのシンボルが無くなってエラーが発生したものと思われます。
>
>  対処としては、削除されるメソッドを他から直接呼び出すようにするか、http://android.git.kernel.org/?p=platform/packages/apps/Contacts.git;...
> > 宜しくお願い致します。- 引用テキストを表示しない -
>
> - 引用テキストを表示 -
Reply all
Reply to author
Forward
0 new messages