我想为我的Sony Smartwatch 3创建一个Android应用程序,几乎不了解Android Studio,以及如何处理不同文件以使事情正常进行。
这就是为什么我从《 Android开发人员指南》开始的原因(这是一个困难而又不完全准确的指南(“创建和运行可穿戴应用程序”))。
您可能会猜到,我拥有的这部Android Wear设备不支持当前的API,因此我无法完全实现指南中描述的代码,因此不得不调整API和依赖项,这对于非专业人士来说是一件难事像我这样的。我似乎已经开始工作了,实际上我可以在手表上显示带有自定义文本的应用程序。
当前情况: 然后是下一步,我要安装一个抽屉,以便在向上滑动时可以进入一个新菜单。因此,我查看了“导航和佩戴Wear的行为2.0”,该教程更适合初学者,但基于他们提供的针对圆形智能手表的项目,因此我不能轻易使用它并且必须坚持使用关于抽屉的Android Developers support page的详细说明。
问题1:(我希望)我像在那儿那样实现了抽屉代码,现在我收到了链接文件资源失败的编译器错误,但我不知道为什么。在acitvity_main.xml
中找不到任何线索,在StackOverflow上具有类似答案的用户都指向该线索。
问题2:另外,导航抽屉适配器存在此问题,该适配器链接到我在开发人员支持页面上实现的类,然后导致在{{1 }}。
很抱歉,我阅读了这么多文字,而错误中出现的例子更少了! 我认为看一下文件会更清楚。我上传了项目here,希望您能告诉我我可以做的一切。
我实际上不知道如何继续进行该项目,我认为我对于实现Wear应用程序的目标并没有那么容易,并且希望有人愿意给我提示。
Logcat:
org.gradle.tooling.BuildException:无法使用Gradle发行版'https://services.gradle.org/distributions/gradle-4.4-all.zip'运行构建操作。 在org.gradle.tooling.internal.consumer.ExceptionTransformer.transform(ExceptionTransformer.java:51) 在org.gradle.tooling.internal.consumer.ExceptionTransformer.transform(ExceptionTransformer.java:29) 在org.gradle.tooling.internal.consumer.ResultHandlerAdapter.onFailure(ResultHandlerAdapter.java:41) 在org.gradle.tooling.internal.consumer.async.DefaultAsyncConsumerActionExecutor $ 1 $ 1.run(DefaultAsyncConsumerActionExecutor.java:57) 在org.gradle.internal.concurrent.ExecutorPolicy $ CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63) 在org.gradle.internal.concurrent.StoppableExecutorImpl $ 1.run(StoppableExecutorImpl.java:46) 在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 在java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:617) 在org.gradle.internal.concurrent.ThreadFactoryImpl $ ManagedThreadRunnable.run(ThreadFactoryImpl.java:55) 在java.lang.Thread.run(Thread.java:745) ...
由以下原因引起:org.gradle.internal.exceptions.LocationAwareException:A 配置项目':app'时出现问题。在 org.gradle.initialization.DefaultExceptionAnalyser.transform(DefaultExceptionAnalyser.java:74)
...
由以下原因引起:org.gradle.api.ProjectConfigurationException:一个问题 配置项目':app'时发生。在 org.gradle.configuration.project.LifecycleProjectEvaluator.addConfigurationFailure(LifecycleProjectEvaluator.java:94) 在 org.gradle.configuration.project.LifecycleProjectEvaluator.notifyAfterEvaluate(LifecycleProjectEvaluator.java:89)
...
原因:java.lang.IllegalStateException:无法找到构建工具 修订于27.0.3 com.android.builder.sdk.DefaultSdkLoader.getTargetInfo(DefaultSdkLoader.java:176) 在 com.android.build.gradle.internal.SdkHandler.initTarget(SdkHandler.java:182) 在 com.android.build.gradle.BasePlugin.ensureTargetSetup(BasePlugin.java:885) 在 com.android.build.gradle.BasePlugin.createAndroidTasks(BasePlugin.java:702) 在 com.android.build.gradle.BasePlugin.lambda $ null $ 4(BasePlugin.java:652) 在 com.android.builder.profile.ThreadRecorder.record(ThreadRecorder.java:81)
谢谢!
答案 0 :(得分:1)
您的项目有几个错误!在MainActivity.java上,您具有onCreate()方法的副本:
安装构建工具或改用版本28
mWearableNavigationDrawer = findViewById(R.id.to_navigation_drawer)
;无法解析,因为您没有具有该ID的布局!相反,您将top_drawer
(我想)作为您的WearableNavigationDrawer的ID
mWearableNavigationDrawer.setAdapter(YourImplementationnavigationAdapter);
也会引发错误,您需要在此处的表达式是您的适配器。类似于:mWearableNavigationDrawer.setAdapter(new YourImplementationNavigationAdapter(this));
由于YourImplementationNavigationAdapter是抽象的,因此您需要实现以下方法:
mWearableNavigationDrawer.setAdapter(new YourImplementationNavigationAdapter(this){
@Override
public CharSequence getItemText(int i) {
return null;
}
@Override
public Drawable getItemDrawable(int i) {
return null;
}
@Override
public int getCount() {
return 0;
}
});
在activity_main.xml
中,您应注释掉/删除以下行:app:actionMenu="@menu/action_drawer_menu
此引用是菜单文件夹中资源文件夹中不存在的项目。或者您应该创建它。
对activity_main_backup.xml来说,与上述相同
更正这些错误后,您的项目应立即构建。只需单击重建项目。
更新:
您的MainActivity.java
应该如下所示:
public class MainActivity extends WearableActivity implements MenuItem.OnMenuItemClickListener {
private WearableDrawerLayout mWearableDrawerLayout;
private WearableNavigationDrawerView mWearableNavigationDrawer;
private WearableActionDrawerView mWearableActionDrawer;
@Override
public boolean onMenuItemClick(MenuItem item) {
return false;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Top navigation drawer
mWearableNavigationDrawer = (WearableNavigationDrawerView) findViewById(R.id.top_drawer);
mWearableNavigationDrawer.setAdapter(new YourImplementationNavigationAdapter(this) {
@Override
public CharSequence getItemText(int i) {
return null;
}
@Override
public Drawable getItemDrawable(int i) {
return null;
}
@Override
public int getCount() {
return 0;
}
});
// Peeks navigation drawer on the top.
mWearableNavigationDrawer.getController().peekDrawer();
// Bottom action drawer
mWearableActionDrawer = (WearableActionDrawerView) findViewById(R.id.bottom_action_drawer);
// Peeks action drawer on the bottom.
mWearableActionDrawer.getController().peekDrawer();
mWearableActionDrawer.setOnMenuItemClickListener(this);
}
}