Пример-расширение виджета Dashclock Невозможно создать службу
Я пытаюсь написать расширение dashclock, поэтому я начал с примера-расширения, но не могу заставить его работать должным образом. Я вижу этот пример расширения в настройках dashclock в списке расширений, но его нет в фактическом виджете dashclock. Периодически вылетает в фоновом режиме с этой трассировкой стека:
02-22 17:04:31.118: E/AndroidRuntime(25888): FATAL EXCEPTION: main
02-22 17:04:31.118: E/AndroidRuntime(25888): java.lang.RuntimeException: Unable to instantiate service com.example.dashclock.exampleextension.ExampleExtension: java.lang.ClassNotFoundException: Didn't find class "com.example.dashclock.exampleextension.ExampleExtension" on path: /data/app/com.example.dashclock.exampleextension-1.apk
02-22 17:04:31.118: E/AndroidRuntime(25888): at android.app.ActivityThread.handleCreateService(ActivityThread.java:2513)
02-22 17:04:31.118: E/AndroidRuntime(25888): at android.app.ActivityThread.access$1600(ActivityThread.java:141)
02-22 17:04:31.118: E/AndroidRuntime(25888): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1316)
02-22 17:04:31.118: E/AndroidRuntime(25888): at android.os.Handler.dispatchMessage(Handler.java:99)
02-22 17:04:31.118: E/AndroidRuntime(25888): at android.os.Looper.loop(Looper.java:137)
02-22 17:04:31.118: E/AndroidRuntime(25888): at android.app.ActivityThread.main(ActivityThread.java:5041)
02-22 17:04:31.118: E/AndroidRuntime(25888): at java.lang.reflect.Method.invokeNative(Native Method)
02-22 17:04:31.118: E/AndroidRuntime(25888): at java.lang.reflect.Method.invoke(Method.java:511)
02-22 17:04:31.118: E/AndroidRuntime(25888): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
02-22 17:04:31.118: E/AndroidRuntime(25888): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
02-22 17:04:31.118: E/AndroidRuntime(25888): at dalvik.system.NativeStart.main(Native Method)
02-22 17:04:31.118: E/AndroidRuntime(25888): Caused by: java.lang.ClassNotFoundException: Didn't find class "com.example.dashclock.exampleextension.ExampleExtension" on path: /data/app/com.example.dashclock.exampleextension-1.apk
02-22 17:04:31.118: E/AndroidRuntime(25888): at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:65)
02-22 17:04:31.118: E/AndroidRuntime(25888): at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
02-22 17:04:31.118: E/AndroidRuntime(25888): at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
02-22 17:04:31.118: E/AndroidRuntime(25888): at android.app.ActivityThread.handleCreateService(ActivityThread.java:2510)
02-22 17:04:31.118: E/AndroidRuntime(25888): ... 10 more
Спасибо за помощь
2 ответа
Ошибка:
java.lang.ClassNotFoundException: не найден класс "com.example.dashclock.exampleextension.ExampleExtension" по пути: /data/app/com.example.dashclock.exampleextension-1.apk
Это означает, что он не может найти ExampleExtension.java
который должен быть расположен в com.example.dash
clock.exampleextension
пакет
Прежде всего, не импортируйте файлы примеров в Eclipse, запустите совершенно новое Android-приложение
Отмените выбор кнопки "Создать действие", когда она просит
После того, как он создан, щелкните правой кнопкой мыши на папке src и добавьте пакет. Затем щелкните правой кнопкой мыши пакет и создайте новый класс. Этот новый класс станет вашим расширением. Получите 2 jar-файла с сайта Dashclock здесь
Перетащите их в папку libs
Добавьте это в свой манифест
<application android:label="@string/app_name"
android:icon="@drawable/ic_extension_yourIcon"
android:theme="@android:style/Theme.Holo">
<service android:name=".YourExtension"
android:icon="@drawable/ic_extension_your_icon"
android:label="@string/your_extension_title"
android:permission="com.google.android.apps.dashclock.permission.READ_EXTENSION_DATA">
<intent-filter>
<action android:name="com.google.android.apps.dashclock.Extension" />
</intent-filter>
<meta-data android:name="protocolVersion" android:value="1" />
<meta-data android:name="description"
android:value="@string/your_extension_description" />
</service>
</application>
Сохраните манифест, найдите ошибки, обозначенные красными линиями, и добавьте соответствующие строки в ваш strings.xml
Вот пустой класс Extension
public class YourExtension extends DashClockExtension {
@Override
protected void onUpdateData(int reason) {
publishUpdate(new ExtensionData()
.visible(true)
.icon(R.drawable.ic_extension_yourIcon)
.status("This is the text when minimized")
.expandedTitle("This is the white Title text when expanded")
.expandedBody("This is the grey footer text when expanded")
.clickIntent(new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.google.com"))));
}
}
В случае, если он не работает после выполнения того, что jb15613 объяснил очень хорошо (я видел в комментариях людей - таких как я - для которых это не работало), на IntelliJ установите на вкладке зависимости модуля в структуре проекта, что вы хотите, чтобы он предоставил JAR как "Компиляция".