上星期,我决定要解决这个问题。理由如下:
3个月之前,我已经投入一段时间要做好这个迁移工作,直到最后,我发现能够安装了,但是运行不了,这个过程也看不到bugly上传,在找不到原因的情况下,我放弃了。
后来,我在svn 下载代码后,在esclipse中运行时,发现这个app可以安装,但是不能运行,和之前我遇到的问题一样。后来,我了解到了是.so文件的缺失。然后联想到之前的迁移问题应该也是这个原因,所以我也开始下定决心,去解决这个问题。
接下来,我整理一下我遇到的问题,和我如何解决:
1.从svn 下载代码 vs 自己从windows copy 代码到macbook上
我首先采取对方法是后者,后来我还是决定要使用svn 下载代码,为了以后更好地更新和提交。
(1)我决定使用svnx 来解决这个问题。
首先,我混淆了Repositories 和 working copies,然后有一点时间纠结于为什么working copies为什么在加载的地址总是少了一个“\”字母,最后,查了百度,都没有找到原因。
后来,才发现其实我需要打开repositories来作好设置。
(2)下载以后,发现需要注意的是import 后的结果,发现svnx设置下载的文件位置 和 import生成的文件位置不一样,两者的架构也有很大区别。
这个时候需要考虑的是以后要通过svnx上传下载代码,如何去同步?
注:之前,我没有理解清楚到底哪里提示错误? 到底是event log?Gradle Console ?后来可以确定的是,需要重点关注Gradle Console ,里面可以提示到底哪个文件是有问题的。然后针对性地
2.一开始运行的时候,发现图片的问题
(1)首先是点九图。点九图的错误基本都在显示图片的地方所显示的红点可以看到。这个可以交给美工去处理。
(2)然后是png的问题。该问题会提示”libpng error: Not a PNG file“,有些是warning,有些是error错误。然后,我就百度,查找到使用“Image Magick”来解决。
(我在安装Image Magick的时候,有些步骤本来是二选一可以跳过,但是我顺着看,忽略了这个是可选择的。)
下载安装好以后,我就先尝试一个文件夹中的png文件是否可以转换,然后再逐个文件夹尝试,由于 在终端中,使用的是类似于
java -jar /Users/gengen/Documents/imagestriptool.jar /Users/gengen/Documents/ICT_android/new_IMSChat/iMSChat/src/main/res/drawable-hdpi /Users/gengen/Documents/ICT_android/new_IMSChat/iMSChat/src/main/res/drawable-hdpi
上面黄色表示的是初始文件夹,下面粉红色表示的是目标文件夹
这两个文件位置都是可以是同一个的
(3)使用
aaptOptions.cruncherEnabled = false
aaptOptions.useNewCruncher = false
忽略其中的png提示错误。
3.共用jar 包的问题
公司的项目是由四个module组成的,其中两个module是公用同一个jar包的。这时候,需要把这jar包提取出来,生成一个新的module。然后在需要使用这个jar包的项目下单击右键,在module setting 去设置引用这个新的module。
4.android studio 的设置问题
接下来,会遇到提示需要在 uses-sdk 添加
tools:overrideLibrary="com.xxx.xxx.xxx",和application中在android:icon后面添加tools:replace=“”。
这个在version control 有提示。
5.gradle build的问题
(1)由于需要优化Dex,而由于处理工具DexOpt对id数目的限制,导致其处理的数目不能超过65536个,因此在Android开发中,需要使用到MultiDex来解决这个问题,MultiDex可以配合Android Studio实现一个apk包含多个dex的功能
因此在android studio 的build.gradule 的android 下添加了
defaultConfig {
multiDexEnabled true
}
(2)在一个module下,提示各种UTF-8不可映射,因此在每个module的build.gradule添加了:
tasks.withType(JavaCompile) {
options.encoding = "UTF-8"
(3)引用了
compile ('com.google.http-client:google-http-client-android:1.21.0')
{exclude group: 'com.google.guava'}
compile ('com.google.api-client:google-api-client-android:1.21.0')
{exclude group: 'com.google.guava'}
compile ('com.google.api-client:google-api-client-gson:1.21.0')
{exclude group: 'com.google.guava'}
compile ('com.google.code.gson:gson:2.4')
这个过程需要下载。
其中,exclude 表示了排除之前已经编译过的包
compile 'com.google.guava:guava:18.0'
6.引入.so 文件,由于没有设置svn可以下载.so文件,我自己copy过去
一开始,还是没有检测到.so文件在哪里使用,后来,我可以查看bugly,然后我上网查到了
首先添加了:
sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}
然后是在lib中的armeabi中的名字修改成 armeabi-v7a,
接下来是在src 下新建
名为jniLibs的文件夹,然后把armeabi-v7a整个文件夹移过去。
7.一些方法是过时的,因此需要在gradule.build中添加这个方法所在的库,例如:
useLibrary 'org.apache.http.legacy'
不过,接下来,就是需要使用新的包来适配方法。
8.每次出现问题重新修改以后,都是需要clean build和rebuild
总的来说,我都是需要关注一个android studio 的每个版本升级需要注意的地方
然后,由于自己对于android很多东西都不熟悉,因此需要百度快速找到解决问题的方法,同时我还要多琢磨每个方法的使用逻辑。