背景:主要为了解决魔方机器人代码运行问题。
【软件配置】JDK+AndroidStudio4.1开发安卓APP环境安装和配置教程详细。
我选择的是下面红框中的版本。
真机运行,你用usb接入电脑,打开手机usb调试模式,你就可以在右上角看到你的手机。
可以看到主机的API的版本号,能够正常连接,但是无法在自己的手机上正常运行,可能是API版本问题。
现在的问题是可以用AS自带的模拟器运行"Hello world!"示例程序,不知道RubikCubeRobot程序如何进行测试,也就是不知道对于别人的程序如何快速跑起来,应该从如何打开已有文件,并导入相应配置找突破口。
参考:GitHub Java项目导入Android studio需要 add configuration问题
Task 'installDebug' not found in root project 'RubikCubeRobot-master'.
如何成功运行和导入别人的android studio项目?
Unable to determine application id: com.android.tools.idea.run.ApkProvisionException: No outputs for
(1)修改配置文件的过程中,发现根目录下的gradle文件里面的内容classpath没有,是不是android studio版本太新的原因。
这是安装的系统版本,打算降低android studio版本到3.5.3,因为新版本的创建的目录结构和3.53版本不一致,和github程序的代码也不一致。
参考博客: Android studio安装(免配置环境)【版本:3.5.3】
参考:Android Studio下载及安装3.5版本(网盘链接密码错误,安装过程可参考)。找到下载地址,卸载之前的版本,并安装3.5版本。安装完后,创建empty activity, Gradle sync同步太慢,解决方案参考:gradle sync太慢的问题。原因是国内访问jcenter太慢,甚至连接不上,就会报各种关于依赖更新失败的错误。修改完后,进行同步:
buildscript {
repositories {
maven{ url 'http://maven.aliyun.com/nexus/content/groups/public/'}
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:4.0.1'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
maven{ url 'http://maven.aliyun.com/nexus/content/groups/public/'}
google()
jcenter()
}
}
很快就同步成功了,显示如下:
更新完之后的变化就是,就是app出现了,可以“run”了。
添加模拟器设备,自动识别和sdk一致的api。
点击模拟器后“run”按钮,可以正常运行。
接下来就还回到原来问题,利用新安装的android studio 3.5.3版本跑魔方机器人程序。
(1)解压程序,参考:如何成功运行和导入别人的android studio项目?把文件夹中不必要的文件删掉。
(2)更新根目录下的build.gradle文件内容。
(3)更新app文件夹下的build.gradle文件里的sdk版本。
(4)打开gradle\wrapper\gradle-wrapper.properties复制最后一句,去到要导入的项目进行替换。(一致不需要修改)
(5)”import“ 项目
import后选择第一个,然后下一步,下一步。但是文件目录结构和“Hello world”目录结构不一致。
目录结构如下所示:
(6)下载另一个rubik项目程序,因为这个结构更加简单,没有OpenCV程序。
同步的时候,报上面的错误,但是“Hello world”也是这样的设置,是可以正常运行的。不清楚什么原因。
错误信息:
ERROR: Could not find com.android.tools.build:gradle:3.5.3.
Searched in the following locations:
- http://maven.aliyun.com/nexus/content/groups/public/com/android/tools/build/gradle/3.5.3/gradle-3.5.3.pom
- http://maven.aliyun.com/nexus/content/groups/public/com/android/tools/build/gradle/3.5.3/gradle-3.5.3.jar
- https://jcenter.bintray.com/com/android/tools/build/gradle/3.5.3/gradle-3.5.3.pom
- https://jcenter.bintray.com/com/android/tools/build/gradle/3.5.3/gradle-3.5.3.jar
Required by:
project :
Add Google Maven repository and sync project
Open File
解决方案:解决 Could not find com.android.tools.build:gradle 问题。
这里也可以查看和设置SDK的版本。
上一个解决方案,没有解决,根据错误信息在CSDN中搜:
解决方案2:ERROR: Could not find com.android.tools.build:gradle:3.5.3.
解决方法:在repositories{}内添加google()
可以正常同步,并且module:app处于激活状态。
(7)run程序出现下面的错误:
错误: 程序包org.twinone.rubiksolver.robot不存在
将robot文件夹放置到与util文件夹同级,可以找到了。
Configuration 'compile' is obsolete and has been replaced with 'implementation' and 'api'.
错误信息如上图所示,搜了一下解决方案,Configuration 'compile' is obsolete and has been replaced with 'implementation。
可以消除第一个warning,但是后面的warning不能消除。
Mapping new ns http://schemas.android.com/repository/android/common/02 to old ns http://schemas.android.com/repository/android/common/01
参考:Android编译出现Warning: Mapping new ns to old ns的解决方案
自己的android studio并没有对应的更新工具。
那我们按照前面gradle版本及插件进行更新设置呢?
按照上表提升gradle及插件版本,发现不能无限制的提升,因为gradle5.6.4及以上需要安装android studio3.6。
通过上图可以看到android studio的SDK版本和gradle版本是有对应关系的。
修改配置文件,并下载相应的sdk和sdk tools, 然后修改模拟器相应版本,运行报下面的错误。
查找解决方法:Android Studio中虚拟机运行时报错的解决方法,可以运行,没有提示上述错误了,但是app还是跑不起来。
解决方法:换个夜神模拟器试试。
查看了一下,自己的电脑的模拟器应该是正常的,所以可能是程序的问题。在尝试换个程序试试。
不错的开源项目:GitHub - twinone/rubik-robot: Rubik's Cube solver robot
但是出现另一个问题就是识别完6个面后,不能完成赋值(识别完6个面后),闪退,自己之前认为是版本不兼容的问题,后来自己反复测试了6个面的识别,发现并不是所有的情况下都闪退,有时候识别全黑也是没有问题的,也能正常完成赋值操作,所以自己拿魔方测试了一下,发现正常识别魔方,它也不会闪退,而且识别率还是挺高的。
(二)另外一种可能是模拟器的问题。
【1】AndroidStudio安装及使用过程中的问题。