1nt3g3r
@1nt3g3r

Ошибка при публикации Android приложения

У меня возникла следующая проблема: есть приложение, которое состоит из двух связанных проектов: основной и порт для андроида. Порт для андроида собираю ant-ом, им же и подписываю. Файл apk нормально создается, когда сбросить этот файл на устройство и запустить, приложение нормально устанавливается и работает. Но когда приложение публикуется на Google Play, при запуске появляется сообщение про неожиданное завершение работы программы. LogCat показывает
ошибку
10-16 10:21:49.059: E/AndroidRuntime(10140): FATAL EXCEPTION: main
10-16 10:21:49.059: E/AndroidRuntime(10140): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.fractal.labs.fruity.hunter.free/com.fractal.labs.fruity.hunter.free.FruityHunterActivity}: java.lang.ClassNotFoundException: com.fractal.labs.fruity.hunter.free.FruityHunterActivity in loader dalvik.system.PathClassLoader[/data/app/com.fractal.labs.fruity.hunter.free-1.apk]
10-16 10:21:49.059: E/AndroidRuntime(10140): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1680)
10-16 10:21:49.059: E/AndroidRuntime(10140): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1784)
10-16 10:21:49.059: E/AndroidRuntime(10140): at android.app.ActivityThread.access$1500(ActivityThread.java:123)
10-16 10:21:49.059: E/AndroidRuntime(10140): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:939)
10-16 10:21:49.059: E/AndroidRuntime(10140): at android.os.Handler.dispatchMessage(Handler.java:99)
10-16 10:21:49.059: E/AndroidRuntime(10140): at android.os.Looper.loop(Looper.java:130)
10-16 10:21:49.059: E/AndroidRuntime(10140): at android.app.ActivityThread.main(ActivityThread.java:3835)
10-16 10:21:49.059: E/AndroidRuntime(10140): at java.lang.reflect.Method.invokeNative(Native Method)
10-16 10:21:49.059: E/AndroidRuntime(10140): at java.lang.reflect.Method.invoke(Method.java:507)
10-16 10:21:49.059: E/AndroidRuntime(10140): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
10-16 10:21:49.059: E/AndroidRuntime(10140): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
10-16 10:21:49.059: E/AndroidRuntime(10140): at dalvik.system.NativeStart.main(Native Method)
10-16 10:21:49.059: E/AndroidRuntime(10140): Caused by: java.lang.ClassNotFoundException: com.fractal.labs.fruity.hunter.free.FruityHunterActivity in loader dalvik.system.PathClassLoader[/data/app/com.fractal.labs.fruity.hunter.free-1.apk]
10-16 10:21:49.059: E/AndroidRuntime(10140): at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:240)
10-16 10:21:49.059: E/AndroidRuntime(10140): at java.lang.ClassLoader.loadClass(ClassLoader.java:551)
10-16 10:21:49.059: E/AndroidRuntime(10140): at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
10-16 10:21:49.059: E/AndroidRuntime(10140): at android.app.Instrumentation.newActivity(Instrumentation.java:1021)
10-16 10:21:49.059: E/AndroidRuntime(10140): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1672)
10-16 10:21:49.059: E/AndroidRuntime(10140):… 11 more


Вот манифест
AndroidManifest.xml
<?xml version=«1.0» encoding=«utf-8»?>
<manifest xmlns:android=«schemas.android.com/apk/res/android»
package=«com.fractal.labs.fruity.hunter.free»
android:versionCode=«2»
android:versionName=«1.0» >

<uses-sdk android:minSdkVersion=«7» />
<uses-permission android:name=«android.permission.VIBRATE»/>
<uses-permission android:name=«android.permission.INTERNET»/>

<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:name=".FruityHunterActivity"
android:label="@string/app_name" android:screenOrientation=«landscape»>
<intent-filter>
<action android:name=«android.intent.action.MAIN» />

<category android:name=«android.intent.category.LAUNCHER» />
</intent-filter>





Вот класс стартовой деятельности
FruityHunterActivity.java
package com.fractal.labs.fruity.hunter.free;

import java.util.Locale;

import android.os.Bundle;

import com.badlogic.gdx.backends.android.AndroidApplication;
import com.fractal.labs.fh.FrontController;

public class FruityHunterActivity extends AndroidApplication {
/** Called when the activity is first created. */
Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
initialize(FrontController.getInstance(Locale.getDefault(), false, false), false);
}
}


Вот вырезка из build.xml
<target name="build.free.nohd" depends="make.symlinks.free.nohd">
		<mkdir dir="${export.path}"/>
		<exec command="${android.command.dir}/android update project -p ${android.free.nohd}"/>
		<exec command="ant release" dir="${android.free.nohd}"/>
		<exec command="jarsigner -keystore ${keystore.name} -signedjar ${android.free.nohd.release}.noalign -storepass ${keystore.pass} -keypass ${alias.pass} ${android.free.nohd.nosign} ${alias.name}"/>
		<exec command="${android.command.dir}/zipalign -f -v 4 ${android.free.nohd.release}.noalign ${android.free.nohd.release}"/>
	</target>


Что интересно, перед этим все нормально работало, и на google play заливалось и устанавливалось без проблем. Сборка производилась с помощью Eclipse. Да и сейчас все работает нормально ровно до момента заливки на Google Play. То есть, может, google play как-либо обрабатывает apk, и это нужно как-то учитывать?

Еще такой вроде мелкий вопрос. Как правильно в манифесте именовать деятельность: .Activity, Activity, com.app.Activity? на том же StackOverflow пишут разные варианты, какая между ними разница.

Сборка android проекта в Eclipse имеет какие-либо подводные камни? Например, в случае сборки двух связанных проектов. Я добавил просто в ant.properties строчку source.dir=../FruityHunterDesktop/src/com/ Если у кого есть опыт сборки антом, просьба поделиться примерами кусков build.xml.
  • Вопрос задан
  • 4179 просмотров
Пригласить эксперта
Ответы на вопрос 3
У меня подобная ошибка выдавалась, когда я делал билд для чистого андроида, а не для андроида от гугл. Проверьте все-ли билблиотеки, которые вы используете находятся в билде (тупо галочи в свойствах проекта у библиотек). А также проверьте package, правильно-ли указан путь.
У .Activity путь указан «из package», у com.path.Activity путь полный.
Ответ написан
LeoCcoder
@LeoCcoder
а proguard'ом вы пользуетесь? проблемы с загрузкой классов возникали пару раз и все разы были во время экспериментов с прогвардом…
Ответ написан
@kristoft
java.lang.ClassNotFoundException возникает по разным причинам. Одна из наиболее частых - ошибки в зависимостях, дублирование зависимостей. Думаю стоит капать в эту сторону. Также можно попробовать сделать CLEAN
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы