jarとsoファイルを使用したアプリをプリインアプリとして組み込む方法

6,091 views
Skip to first unread message

nina

unread,
Dec 14, 2010, 11:15:27 AM12/14/10
to 日本Androidの会
初めまして、ninaと申します。
標記の件について、質問させてください。

現在、jarとsoファイルを使用したアプリを作成しております。
Androidバージョンは2.2 Froyoです。
Eclipseでビルドし、SDK環境で/data配下にアプリをインストールした場合は正常に動作するのですが、
プリインストールアプリとして、/system配下に組み込みを行った場合、アプリ起動の際に落ちてしまう現象が発生しています。

プロジェクトのディレクトリ構成は以下の通りです。
----------------------------------------
/AppName
Android.mk
Android.Manifest.xml
default.properties
/assets
/jars
aaa.jar
/libs
/armeabi
libabc.so
/res
/src
javaファイル
----------------------------------------

Android.mkの内容は以下の通りです。
------------------------------------------------------------------------------------------------------
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_STATIC_JAVA_LIBRARIES := libaaa
LOCAL_REQUIRED_MODULES := libabc
LOCAL_ASSET_FILES := $(call find-subdir-assets)
LOCAL_SRC_FILES := $(call all-subdir-java-files)
LOCAL_PACKAGE_NAME := TestApp
LOCAL_CERTIFICATE := platform
LOCAL_PROGUARD_ENABLED := full
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)
------------------------------------------------------------------------------------------------------

プリインストール方法ですが、
/packages/app/配下にソース環境一式を格納し、/build/target/product/generic.mkcore.mkに自
作アプリ名を追記しています。
Emulator起動したところ、/system/app配下に自作アプリのapkファイルが展開されたのは確認済みです。

jarとsoファイルの内容は隠蔽されているため詳細は分かりませんが、恐らくJNIを使用していると思われます。
java→jarへのアクセス、jarからsoへのアクセスは確認できましたが、so→jarのコールバックができないらしくエラーとなっています。
恐らくso⇔jarのリンクができていないせいかと思われます。
Android.mkの不備や、他makeファイルへの記載が不足しているのではと思っているのですが、情報をお持ちの方は教えて頂けませんでしょう
か。

宜しくお願い致します。

mizushima2

unread,
Dec 14, 2010, 6:42:16 PM12/14/10
to android-g...@googlegroups.com
ninaさんへ

> プリインストールアプリとして、/system配下に組み込みを行った場合、アプリ起動の際に落ちてしまう現象が発生しています。
プリインストールアプリの動作確認の経験はありませんが、ActivityManagerな
どのエラーは出ていないでしょうか?
エラーなしの場合、実機(端末)を開発PCを接続し、Eclipseのリモートデバッ
ク機能でトレースを行うことをお勧めします。

TM

> --
> このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
> このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
> このグループから退会するには、android-group-j...@googlegroups.com にメールを送信してください。
> 詳細については、http://groups.google.com/group/android-group-japan?hl=ja からこのグループにアクセスしてください。
>

様 お世話になります。
アイエスティー 水島です。

以上、よろしくお願い致します。

*************************************************************
(株)アイエスティー
取締役 水島 鉄夫
〒107-0062:東京都港区南青山2-17-3 モーリンビル 4F
TEL:(03)5474-4547  FAX:(03)5474-4503
携帯:080-6091-6604
E-mail:mizus...@j-ist.co.jp
URL:http://www.j-ist.co.jp
*************************************************************

Hiroshi Matsunaga

unread,
Dec 15, 2010, 12:03:03 PM12/15/10
to android-g...@googlegroups.com
松永と申します。

的確な返信ではないかもしれませんが、
Eclipse上から実行できているならば、
APKで作成可能かと思います。
APKをプリンインストールにするには、
  LOCAL_PATH := $(call my-dir)
  include $(CLEAR_VARS)
   
  # Module name should match apk name to be installed.
  LOCAL_MODULE := LocalModuleName
  LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
  LOCAL_MODULE_CLASS := APPS
  LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
   
  include $(BUILD_PREBUILT)
を利用可能かと思いますので、
作成したアプリをプリインストールにできると思います。

以上です。


2010年12月15日1:15 nina <sawata...@gmail.com>:
--
このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
このグループから退会するには、android-group-j...@googlegroups.com にメールを送信してください。
詳細については、http://groups.google.com/group/android-group-japan?hl=ja からこのグループにアクセスしてください。




--
Hiroshi Matsunaga
email: hiroshi.82...@gmail.com

nina

unread,
Dec 15, 2010, 10:04:31 PM12/15/10
to 日本Androidの会
水島さん

ご回答ありがとうございます。
現在、ActivityManagerなどのエラーは出ておりません。
LogCatにて以下のエラーが出ています。

01-01 00:00:38.504: 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;

処理として、Java→soがJNI使用で、so→JARへコールバックをしているのですが、soからJAR内のメソッドが見えない(リンクできていな
い)のが原因と思われます。

Eclipseのリモートデバック機能は使用したことがないのですが、一度試してみたいと思います。

また何か情報がありましたらご教授頂きたいです。
宜しくお願い致します。
> > -------------------------------------------------------------------------------------------------------
> > LOCAL_PATH := $(call my-dir)
> > include $(CLEAR_VARS)
> > LOCAL_MODULE_TAGS := optional
> > LOCAL_STATIC_JAVA_LIBRARIES := libaaa
> > LOCAL_REQUIRED_MODULES := libabc
> > LOCAL_ASSET_FILES := $(call find-subdir-assets)
> > LOCAL_SRC_FILES := $(call all-subdir-java-files)
> > LOCAL_PACKAGE_NAME := TestApp
> > LOCAL_CERTIFICATE := platform
> > LOCAL_PROGUARD_ENABLED := full
> > 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)
> > -------------------------------------------------------------------------------------------------------
>
> > プリインストール方法ですが、
> > /packages/app/配下にソース環境一式を格納し、/build/target/product/generic.mkcore.mkに自
> > 作アプリ名を追記しています。
> > Emulator起動したところ、/system/app配下に自作アプリのapkファイルが展開されたのは確認済みです。
>
> > jarとsoファイルの内容は隠蔽されているため詳細は分かりませんが、恐らくJNIを使用していると思われます。
> > java→jarへのアクセス、jarからsoへのアクセスは確認できましたが、so→jarのコールバックができないらしくエラーとなっています。
> > 恐らくso⇔jarのリンクができていないせいかと思われます。
> > Android.mkの不備や、他makeファイルへの記載が不足しているのではと思っているのですが、情報をお持ちの方は教えて頂けませんでしょう
> > か。
>
> > 宜しくお願い致します。
>
> > --
> > このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
> > このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
> > このグループから退会するには、android-group-j...@googlegroups.com にメールを送信してください。
> > 詳細については、http://groups.google.com/group/android-group-japan?hl=jaからこのグループにアクセスしてください。
>
> 様 お世話になります。
> アイエスティー 水島です。
>
> 以上、よろしくお願い致します。
>
> *************************************************************
> (株)アイエスティー
> 取締役 水島 鉄夫
> 〒107-0062:東京都港区南青山2-17-3 モーリンビル 4F
> TEL:(03)5474-4547  FAX:(03)5474-4503
> 携帯:080-6091-6604
> E-mail:mizushi...@j-ist.co.jp
> URL:http://www.j-ist.co.jp
> *************************************************************- 引用テキストを表示しない -
>
> - 引用テキストを表示 -

nina

unread,
Dec 15, 2010, 10:15:04 PM12/15/10
to 日本Androidの会
松永さん

ご回答ありがとうございます。

apkでのプリインストールですが、既に実施済みです。
この場合、Eclipseで生成したapkを使用して組込みを行っています。

こちらも、libabc.soのリンクができておりませんでしたので、
インストール直後は起動時に落ちる現象が発生しておりました。
そこで、
/data/data/PkgName/libs/配下に、手動でlibabc.soをadb pushすることで、
正常動作できることを確認しております。

今回、業務上の開発でこちらのアプリを作成しており、apkではなくソースビルドで
組み込む方針となっておりまして、解決案を模索中です。

また、Eclipseからビルドした場合、apkを解凍してみるとlibabc.soが中に格納されているのですが、
ソースビルドを行った場合に生成されるapkにはlibabc.soが格納されていないことが分かりました。
これも原因の一つかと思いまして、原因究明中です。

また情報をお持ちでしたら是非宜しくお願い致します。

On 12月16日, 午前2:03, Hiroshi Matsunaga <hiroshi.82.matsun...@gmail.com>
wrote:
> 松永と申します。
>
> 的確な返信ではないかもしれませんが、
> Eclipse上から実行できているならば、
> APKで作成可能かと思います。
> APKをプリンインストールにするには、
>
> LOCAL_PATH := $(call my-dir)
> include $(CLEAR_VARS)
>
> # Module name should match apk name to be installed.
> LOCAL_MODULE := LocalModuleName
> LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
> LOCAL_MODULE_CLASS := APPS
> LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
>
> include $(BUILD_PREBUILT)
>
> (参照:http://source.android.com/porting/build_cookbook.html)
> を利用可能かと思いますので、
> 作成したアプリをプリインストールにできると思います。
>
> 以上です。
>
> 2010年12月15日1:15 nina <sawata.har...@gmail.com>:
>
>
>
>
>
> > 初めまして、ninaと申します。
> > 標記の件について、質問させてください。
>
> > 現在、jarとsoファイルを使用したアプリを作成しております。
> > Androidバージョンは2.2 Froyoです。
> > Eclipseでビルドし、SDK環境で/data配下にアプリをインストールした場合は正常に動作するのですが、
> > プリインストールアプリとして、/system配下に組み込みを行った場合、アプリ起動の際に落ちてしまう現象が発生しています。
>
> > プロジェクトのディレクトリ構成は以下の通りです。
> > ----------------------------------------
> > /AppName
> > Android.mk
> > Android.Manifest.xml
> > default.properties
> > /assets
> > /jars
> > aaa.jar
> > /libs
> > /armeabi
> > libabc.so
> > /res
> > /src
> > javaファイル
> > ----------------------------------------
>
> > Android.mkの内容は以下の通りです。
>
> > -------------------------------------------------------------------------------------------------------
> > LOCAL_PATH := $(call my-dir)
> > include $(CLEAR_VARS)
> > LOCAL_MODULE_TAGS := optional
> > LOCAL_STATIC_JAVA_LIBRARIES := libaaa
> > LOCAL_REQUIRED_MODULES := libabc
> > LOCAL_ASSET_FILES := $(call find-subdir-assets)
> > LOCAL_SRC_FILES := $(call all-subdir-java-files)
> > LOCAL_PACKAGE_NAME := TestApp
> > LOCAL_CERTIFICATE := platform
> > LOCAL_PROGUARD_ENABLED := full
> > 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)
>
> > -------------------------------------------------------------------------------------------------------
>
> > プリインストール方法ですが、
> > /packages/app/配下にソース環境一式を格納し、/build/target/product/generic.mkcore.mkに自
> > 作アプリ名を追記しています。
> > Emulator起動したところ、/system/app配下に自作アプリのapkファイルが展開されたのは確認済みです。
>
> > jarとsoファイルの内容は隠蔽されているため詳細は分かりませんが、恐らくJNIを使用していると思われます。
> > java→jarへのアクセス、jarからsoへのアクセスは確認できましたが、so→jarのコールバックができないらしくエラーとなっています。
> > 恐らくso⇔jarのリンクができていないせいかと思われます。
> > Android.mkの不備や、他makeファイルへの記載が不足しているのではと思っているのですが、情報をお持ちの方は教えて頂けませんでしょう
> > か。
>
> > 宜しくお願い致します。
>
> > --
> > このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
> > このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
> > このグループから退会するには、android-group-j...@googlegroups.com<android-gro-up-japan%2Bunsu...@googlegroups.com>にメールを送信してください。
> > 詳細については、http://groups.google.com/group/android-group-japan?hl=jaからこのグループにアクセスしてください。
>
> --
> Hiroshi Matsunaga
> email: hiroshi.82.matsun...@gmail.com- 引用テキストを表示しない -
>
> - 引用テキストを表示 -

mizmit1222

unread,
Dec 15, 2010, 11:36:21 PM12/15/10
to 日本Androidの会
みずの@組み込みWGです。こんにちは。

/systemにはいるパッケージでsoとapkを持つものには
OpenWnnなどのIMEがあります。packages/inputmethods [*1]
のAndroid.mkを参照してみてはいかがでしょうか?

また、OpenWnnなどはイメージビルド時のmakefileに
PRODUCT_PACKAGESとしてパッケージ名を追加することで
自動インストールされるようです。
build/target/product/full.mk [*2] などをご参照ください。

下記は蛇足になりますが、dynabook AZを購入してみて
気づいたことを書きます。dynabook AZにはプリインス
トールアプリがいくつかあるのですが、/system/appに
は入っていないようで、/system/toshiba/appにapkを
置いて、初回起動時に/data/appにインストールする
仕組みになっていました。

最悪の場合の保険として、また/systemだとちょっとし
た手直しでも、OTAなどの方法を取らなければならない
ため、/dataの方がアップデートが簡単という方向にな
った場合の参考となるとうれしいです。

ではでは。

[*1] http://android.git.kernel.org/?p=platform/packages/inputmethods/OpenWnn.git;a=tree
[*2] http://android.git.kernel.org/?p=platform/build.git;a=tree;f=target/product;h=0bf94f967bc7561b7ba62ccbc9cc02cbcc602197;hb=HEAD

nina

unread,
Dec 28, 2010, 10:18:28 PM12/28/10
to 日本Androidの会
みずのさん

返信が遅くなり、申し訳ございません。

今回のアプリはNative部分が既にsoファイルになっているものですが、
みずのさんからご教示頂いたOpenWnnを参考に、
同様の構成でJNIテストアプリを作成したところ、自分のアプリと
同じエラーが出てしまいました。

しかし、ビルドのモードを変更し、再度ビルドした場合、上手く起動
することができました。
どうやら、アプリ側のAndroid.mk等には問題なかったようです。

また、dynabookの例もありがとうございました。
プリインアプリでも/system配下から移す方法もあるのですね。
参考にさせて頂きます。

On 12月16日, 午後1:36, mizmit1222 <mizmit1...@gmail.com> wrote:
> みずの@組み込みWGです。こんにちは。
>
> /systemにはいるパッケージでsoとapkを持つものには
> OpenWnnなどのIMEがあります。packages/inputmethods [*1]
> のAndroid.mkを参照してみてはいかがでしょうか?
>
> また、OpenWnnなどはイメージビルド時のmakefileに
> PRODUCT_PACKAGESとしてパッケージ名を追加することで
> 自動インストールされるようです。
> build/target/product/full.mk [*2] などをご参照ください。
>
> 下記は蛇足になりますが、dynabook AZを購入してみて
> 気づいたことを書きます。dynabook AZにはプリインス
> トールアプリがいくつかあるのですが、/system/appに
> は入っていないようで、/system/toshiba/appにapkを
> 置いて、初回起動時に/data/appにインストールする
> 仕組みになっていました。
>
> 最悪の場合の保険として、また/systemだとちょっとし
> た手直しでも、OTAなどの方法を取らなければならない
> ため、/dataの方がアップデートが簡単という方向にな
> った場合の参考となるとうれしいです。
>
> ではでは。
>
> [*1]http://android.git.kernel.org/?p=platform/packages/inputmethods/OpenW...
> [*2]http://android.git.kernel.org/?p=platform/build.git;a=tree;f=target/p...
> > > > --------------------------------------------------------------------------------------------------------
> > > > LOCAL_PATH := $(call my-dir)
> > > > include $(CLEAR_VARS)
> > > > LOCAL_MODULE_TAGS := optional
> > > > LOCAL_STATIC_JAVA_LIBRARIES := libaaa
> > > > LOCAL_REQUIRED_MODULES := libabc
> > > > LOCAL_ASSET_FILES := $(call find-subdir-assets)
> > > > LOCAL_SRC_FILES := $(call all-subdir-java-files)
> > > > LOCAL_PACKAGE_NAME := TestApp
> > > > LOCAL_CERTIFICATE := platform
> > > > LOCAL_PROGUARD_ENABLED := full
> > > > 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)
>
> > > > --------------------------------------------------------------------------------------------------------
>
> > > > プリインストール方法ですが、
> > > > /packages/app/配下にソース環境一式を格納し、/build/target/product/generic.mkcore.mkに自
> > > > 作アプリ名を追記しています。
> > > > Emulator起動したところ、/system/app配下に自作アプリのapkファイルが展開されたのは確認済みです。
>
> > > > jarとsoファイルの内容は隠蔽されているため詳細は分かりませんが、恐らくJNIを使用していると思われます。
> > > > java→jarへのアクセス、jarからsoへのアクセスは確認できましたが、so→jarのコールバックができないらしくエラーとなっています。
> > > > 恐らくso⇔jarのリンクができていないせいかと思われます。
> > > > Android.mkの不備や、他makeファイルへの記載が不足しているのではと思っているのですが、情報をお持ちの方は教えて頂けませんでしょう
> > > > か。
>
> > > > 宜しくお願い致します。
>
> > > > --
> > > > このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
> > > > このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
> > > > このグループから退会するには、android-group-j...@googlegroups.com<android-gro--up-japan%2Bunsu...@googlegroups.com>にメールを送信してください。
> > > > 詳細については、http://groups.google.com/group/android-group-japan?hl=jaからこのグループにアクセスしてください。
>
> > > --
> > > Hiroshi Matsunaga
> > > email: hiroshi.82.matsun...@gmail.com- 引用テキストを表示しない -
>
> > > - 引用テキストを表示 -- 引用テキストを表示しない -
>
> - 引用テキストを表示 -
Reply all
Reply to author
Forward
0 new messages