Gradle Android项目迁入Eclipse+ADT已有项目的过程

上次,把Gradle Android项目load进了Eclipse环境中,看似成功了,但是不能Build。于是我想把它加入到一个正常的Eclipse+ADT已有Android项目,嗯,本来也是需要那样做的。

一,先观察两个项目,发现Android的Activity、AndroidManifest、Resourse等,这些两边都有,所以应该是可以捏在一起的。
  二,把相应的src下面的包和java文件copy过来,包名改成合适的。这里遇到了第一个问题,原Eclipse项目编码是GBK,新代码是UTF-8,因为新代码很少,所以就直接把里面的汉字都换一遍就好了。
  三,copy过来,Eclipse开始了出错提醒:
    1,Class requires API level 14 (current min is 11): android.view.TextureView
    解决:找到AndroidManifest.xml里面的minSdkVersion,把它设成14
    2,R cannot be resolved to a variable
    这个是Layout没copy造成的,后面自然会好
    3,The import com.chainway cannot be resolved
    解决:这个是互相引用的包名没改,改掉自然好
    4,The import android.support.annotation cannot be resolved
    这个annotation单词,惊不惊喜?眼不眼熟?前面鄙人的文章《话说android-support-v4.jar的版本冲突产生的问题》说的就是高版本的android-support-v4.jar里面包含了annotation,当时我的解决方案是为了避免冲突使用低版本,导致了这个问题,现在新代码要求用annotation。
    但是,现在新问题来了,导入了新android-support-v4.jar以后,问题仍旧存在,报:The import android.support.annotation.RequiresApi cannot be resolved。一查,这个RequiresApi 要7.0(24)才支持,但是我们生产用的PDA设备Android只有6.0(23),只好先把用到RequiresApi 的地方先注解掉。
    5,把SDK升到23,结果一开Eclipse,报:发现了以元素’d:skin’开头的无效内容。此处不应含有子元素。
    解决:看了一下,报错的devices.xml是Android的“穿戴”和“电视”,肯定用不到。但是报错很烦,就用网上的方法把sdk\tools\lib\devices.xml直接替换掉错误的文件。
  四,copy Layout文件过来,activity_main.xml重复,改个名字就好,相应的src下面的java文件对应的setContentView也要改掉。
  五,刷新下项目,报了很多:No resource found that matches the given name (at ‘textColor’ with value ‘@color/WHITE’).合并两个项目的资源文件colors、strings、styles、drawable,去除重复内容。
  六,报:Type mismatch: cannot convert form View to GreenRect.
  解决:一开始很诧异,View转控件这不是系统本身提供的功能吗?网上查了一下,讨论这个的很少,不过也查到了一点蛛丝马迹。跟着报错的控件名去找Layout文件,果然,还是包名没有替换完全引起的。控件原来的定义是这样的

<com.hambobo.chainway.facerecognized.Widget.GreenRect
                android:id="@+id/FaceRect"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:background="@color/TRANSPARENT"
                android:layout_margin="3sp"/>

改成新包名

<com.shangtu.facerecognized.Widget.GreenRect
                android:id="@+id/FaceRect"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:background="@color/TRANSPARENT"
                android:layout_margin="3sp"/>

另外,在源代码前面加一句强制转换

leftRect = view.findViewById(R.id.FaceRect);

改成

leftRect = (GreenRect)view.findViewById(R.id.FaceRect);

七,至此,Eclipse提示的所有error均已解决,Run as Android Application。报错:Failed to load E:\MyProjects…\sdk\build-tools\26.0.2\lib\dx.jar
  ADT比SDK版本低了,或者说SDK太高了,下载23的build tools,然后在project.properties里加一句:sdk.buildtools=23.0.1
  八,再Run,AVD19能跑,AVD23不能跑,Logcat里报JniInvocation找不到so文件的错。找到arm64-v8a和armeabi-v7a下共计6个编译好的so文件,把这两个目录copy到 \libs 下面。AVD23不报错了,但是启动的时候,停留在Android字样长时间不动。
  九,先用AVD19跑,把启动界面设置成刷脸(新功能),启动就闪退,Logcat报:

08-15 03:08:26.500: W/dalvikvm(1679): VFY: unable to resolve virtual method 114: Landroid/app/Activity;.onRequestPermissionsResult (I[Ljava/lang/String;[I)V

查了下,说是19不支持,我哭,还得掉过头来研究23的卡顿,不管咋说,项目是加进来了,具体调试以后的文章再说吧

猜你喜欢

转载自blog.csdn.net/teapot235/article/details/81737160