私のAndroidアプリには、4つのライブラリがあります。
libTemplate.so
depends on libPorkholt.so
libPorkholt.so
depends on libpng15.so
depends on liblua.so
depends on libopenal.so
libpng15.so
liblua.so
libopenal.so
libTemplateに対してリンクする小さなコマンドライン実行可能ファイルを作成し、手動でANativeActivity_onCreateを呼び出すと、リンクして正常に実行されます(LD_LIBRARY_PATHを/data/data/com.mycompany.Template/libにポイントした場合)
アプリを実行すると、次の非常に便利なエラーメッセージが表示されます。
E/AndroidRuntime(13214): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.mycompany.Template/android.app.NativeActivity}: java.lang.IllegalArgumentException: Unable to load native library: /data/data/com.mycompany.Template/lib/libTemplate.so
ANativeActivity_onCreateも入力されないので、私の唯一の推測は、リンクと関係があるということです。
私はおそらくこのスクリプトでCMakeを使用していることを言及する必要があります:http : //code.google.com/p/android-cmake/(ndk-buildなしで)ライブラリを自分でビルドします。私はそれを使ってnative-activityサンプルをコンパイルすることができたので、それが機能することを知っています。
また、sonameにバージョン番号が含まれているライブラリがないことを確認しました
私のマニフェスト:
<?xml version="1.0" encoding="utf-8"?>
<!-- BEGIN_INCLUDE(manifest) -->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.mycompany.Template"
android:versionCode="1"
android:versionName="1.0">
<!-- This is the platform API where NativeActivity was introduced. -->
<uses-sdk android:minSdkVersion="9" />
<!-- This .apk has no Java code itself, so set hasCode to false. -->
<application android:label="Template Porkholt project" android:hasCode="false">
<!-- Our activity is the built-in NativeActivity framework class.
This will take care of integrating with our NDK code. -->
<activity android:name="android.app.NativeActivity"
android:label="Template Porkholt project"
android:configChanges="orientation|keyboardHidden">
<!-- Tell NativeActivity the name of or .so -->
<meta-data android:name="android.app.lib_name"
android:value="Template" />
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
<!-- END_INCLUDE(manifest) -->