Я хочу переключиться на maven для моего процесса сборки в разработке для Android. Я следил заhttp://www.sonatype.com/books/mvnref-book/reference/android-dev-sect-archetype.htmlчтобы создать pom.xml и немного скорректировать версию, чтобы я использовал последнюю версию плагина android -maven -.
Хотя мой apk собирается вручную из моей IDE (IntellJ ), существуют проблемы с apk, созданным с помощью maven. Очевидно, чего-то не хватает, что не помещает классы в apk.
Когда я проверяю оба сгенерированных apk (, разархивируя их ), , я обнаруживаю, что class.dex сгенерированного maven apk намного меньше (2,6 КБ ), чем обычный (24,9 КБ ). Очевидно, что там не хватает классов.
Итак, при запуске этого apk я получаю следующую ошибку:
E/AndroidRuntime(31228): FATAL EXCEPTION: main
E/AndroidRuntime(31228): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.mycompany.abc/com.mycompany.abc.ABCActivity}: java.lang.ClassNotFoundException: com.mycompany.abc.ABCActivity in loader dalvik.system.PathClassLoader[/mnt/asec/com.mycompany.abc-1/pkg.apk]
E/AndroidRuntime(31228): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1569)
E/AndroidRuntime(31228): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
E/AndroidRuntime(31228): at android.app.ActivityThread.access$1500(ActivityThread.java:117)
E/AndroidRuntime(31228): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
E/AndroidRuntime(31228): at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime(31228): at android.os.Looper.loop(Looper.java:130)
E/AndroidRuntime(31228): at android.app.ActivityThread.main(ActivityThread.java:3683)
E/AndroidRuntime(31228): at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(31228): at java.lang.reflect.Method.invoke(Method.java:507)
E/AndroidRuntime(31228): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
E/AndroidRuntime(31228): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
E/AndroidRuntime(31228): at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime(31228): Caused by: java.lang.ClassNotFoundException: com.mycompany.abc.ABCActivity in loader dalvik.system.PathClassLoader[/mnt/asec/com.mycompany.abc-1/pkg.apk]
E/AndroidRuntime(31228): at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:240)
E/AndroidRuntime(31228): at java.lang.ClassLoader.loadClass(ClassLoader.java:551)
E/AndroidRuntime(31228): at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
E/AndroidRuntime(31228): at android.app.Instrumentation.newActivity(Instrumentation.java:1021)
E/AndroidRuntime(31228): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1561)
E/AndroidRuntime(31228): ... 11 more
W/ActivityManager( 4964): Force finishing activity com.mycompany.abc/.ABCActivity
W/ActivityManager( 4964): Activity pause timeout for HistoryRecord{40902960 com.mycompany.abc/.ABCActivity}
Это мой pom.xml, на котором я использую:mvn install -P sign
илиmvn android:apk
4.0.0
com.mycompany
com.mycompany.abc
1.0-SNAPSHOT
apk
com.mycompany.abc
com.google.android
android
2.2.1
provided
org.codehaus.mojo
properties-maven-plugin
1.0-alpha-2
initialize
read-project-properties
android.properties
com.jayway.maven.plugins.android.generation2
android-maven-plugin
3.2.0
${project.basedir}/AndroidManifest.xml
${project.basedir}/assets
${project.basedir}/res
${project.basedir}/src/main/native
11
true
true
usb
true
maven-compiler-plugin
2.3.2
1.6
exec-maven-plugin
org.codehaus.mojo
${basedir}/scripts/run_app.sh
sign
org.apache.maven.plugins
maven-jarsigner-plugin
1.2
signing
sign
package
true
target/*.apk
/path/to/debug.keystore
android
android
androiddebugkey
-sigalg MD5withRSA
-digestalg SHA1
com.jayway.maven.plugins.android.generation2
android-maven-plugin
true
false