合作方提供的是 sdk.aar 包,本想单独建 library 项目引入,试了下发现生成的 aar 中并没有 sdk 代码,遂在主项目中通过如下代码引入项目
android{
...
repositories {
flatDir {
dirs 'libs'
}
}
}
dependencies{
compile(name: 'sdk', ext: 'aar')
}
Manifest 合并冲突
sdk android:allowBackup=”false”, 主项目为 true,其他第三方库中也有为 true 的,因此不能通过只改变主项目为 false 解决冲通,只能解决冲突。错误中也有提示在<application>
中添加tools:replace="android:allowBackup"
,之前的 variant 的 title、name 也都是这么用的,但尼玛这次就跪了,还是编译不过去。官方文档过一遍,stackoverflow 过一遍,最终发现这 TM 是个 bug…<application>
中还有个tools:ignore="xxx"
,删除即可…半天过去了…第三方库冲突
okhttp、okio 等常用第三方库用的非常广泛,但你不能直接塞到 sdk 里啊,解压删除 classes.jar 中的相关类
64K
集成后方法数超了,先直接用了 Google 官方的 MultiDex
compile 'com.android.support:multidex:1.0.0'
然后指定 MultiDexApplication 或者在自己的 Application 里
@Override protected void attachBaseContext(Context base) { super.attachBaseContext(base); MultiDex.install(this); }
还是冲突
Picasso 2.5.2 依赖老版本的 okhttp,七牛由于历史原因使用的是 jar 包,就都全换了
最新的 Picasso 已经不依赖 okhttp,并且通过反射优先使用 okhttp3 or urlconnection,但也没人维护了。 - -,七牛也用 okhttp3了,都换上 gradle 管理就简单多了。
allprojects { repositories { jcenter() maven { url 'https://oss.sonatype.org/content/repositories/snapshots/' } } } compile 'com.qiniu:qiniu-android-sdk:7.2.0' compile 'com.squareup.picasso:picasso:2.6.0-SNAPSHOT'
so
sdk 里只提供了 armeabi 的 so,但是项目中使用的推送等都是全平台的,导致最终的 apk 只有 armeabi 下有直播 sdk 的 so。具体的问题可参见与 so 有关的一个长年大坑,暂时删除其他文件夹。
还是 so
试了两个手机发现还是崩溃,因为另外一个 gradle 引用的第三方库里有各个平台的 so…还是导致了上面的问题.
通过 gradle 的 splits 功能解决,只用单一的 so
splits { abi { enable true reset() include 'armeabi' universalApk false } }
暂时编译通过,手头的两台测试机跑过去了,一天也过去了…后面的事后面再说吧…