SDK踩坑全纪录

时间:2022-03-04 09:12:34

No1:

Unity2017.1版本导出的android工程放到Android Studio上跑起来非常卡,Unity2017.3或4版本导出就没问题。

对比后发现gradle文件有差异,特此标注

1)gradle版本改为2.3.0

2)sdk版本改为27或以下

3)android块中加这句

aaptOptions {
    noCompress '.unity3d', '.ress', '.resource', '.obb'
}

资源压缩的问题

No2:

Unity导出的android工程里暴露了唯一的Activity:UnityPlayerActivity,其实就是unity-class.jar包里的UnityPlayerActivity。

我们可以把暴露的Java类删除,继承unity-class.jar包里的UnityPlayerActivity,写一个新的类,这样的话,只要这个类实现了新的接口。Unity那边就可以通过反射调用相同的接口,从而实现了Android与Unity之间交互。

No3:

今天一天都在找权限问题,明明在清单文件里注册了权限,结果打成apk后,清单文件里权限就没了,找了整整一天的原因,结果是接的sdk里隐藏了这句

<uses-permission android:name="android.permission.READ_PHONE_STATE" 
    tools:node="remove"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" 
    tools:node="remove"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
    tools:node="remove"    />

sdk是别人写的,让作者改吧

No4:

O7合并代码逻辑,每新建一个分支,提交代码后,都要合并到master主分支,原因是公共库给其他工程用的时候,不需要找最新的版本,只需要下载master分支就是最新的了。

No5:

打包提示:Error:java.lang.RuntimeException: Some file crunching failed, see logs for details

原因:

1.构建Gradle的时候,Gradle会去检查一下是否修改过文件的后缀名;

2.一般大多数是出现在图片上,.jpg修改成了.png就会出现这个问题;

3.9patch图片也可能出现这个问题。

解决方法:

gradle文件android块中增加

aaptOptions {
    cruncherEnabled = false
    useNewCruncher = false
}

No5:

错误:uses-sdk:minSdkVersion 1 cannot be smaller than version 4 declared in library 

原因:有类库没有配置最低兼容版本

解决:

defaultConfig {
        minSdkVersion 10
        targetSdkVersion 19
    }

增加即可

No6:

aar里面是不能把其他aar打进去的,解决方法只有

1.多引用一次aar

2.把aar解压,分文件夹合成一个aar

No7:

library里如果compile了maven库,那么library打成aar是不会包含maven里的内容的,主工程引用library打成的aar时,需要再次compilemaven库

No8:

报错:Duplicate files copied in APK META-INF/LICENSE

解决:android块中添加

    packagingOptions {
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/ASL2.0'
    }

No9:
运行apk提示

SDK踩坑全纪录

原因:主工程的jni文件下只有x86,armeabi_v7a两种架构,但是引入的aar或library里jni下除了x86,armeabi_v7a,还有其他的架构

解决:把多余的删除就好了

No10:

unity导出的android工程后,我们需要删除默认的UnityPlayerActivity启动页,然后再打成aar包,放到公共工程的lib中去,不然会有两个启动icon

No11:

maven仓库分四种类型:group仓库组、hosted本地仓库、proxy代理仓库、virtual虚拟仓库

本地上传的话,只能传到hosted仓库,所以gradle脚本只能写

http://127.0.0.1:8081/nexus/content/repositories/thirdparty

No12:

报错:Android.content.ActivityNotFoundException: Unable to find explicit activity class {com.example.message/com.example.message}; have you declared this activity in your AndroidManifest.xml?

原因:找不到activity,因为接入的sdk更新了,清单文件的配置改了

解决:重新接入最新版sdk

No13:

出包的时候,aar不要签名或者不要打release包,不然apk打出来有问题,亲测

No14:

apk游戏打不开,有可能是服务器端口权限没开放

No15:

EventBus是必须用单例的,所以在不同library中,最好通过导jar的方式使用自己的EventBus

No16:

unity的onBackPressed方法是无法监听到的,只有用监听物理按键的方式去抓,还有,因为activity是继承unityplayerActivity的,所以不要调super.onbackpressed方法!!!

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
Log.d(TAG, "MainActivity--onBackPressed");
EventBus.getInstance().fireEvent(CommonEvents.MAIN_ACTIVITY_ON_BACK_PRESSED);
return true;
}
return super.onKeyDown(keyCode, event);
}

No17:

如何知道buildToolsVersion哪些版本是可用的?很简单,sdk下载后能看到

SDK踩坑全纪录

No18:

Unity的登录监听和android层的登录监听可能不是同时开启的,会导致登录失败,最好由unity调起android层的登录监听