1.安卓的图片资源命名。必须为小写。。可以加下划线。
2.问题:项目Modules无法编译成Android项目
报错信息:
Cannot choose between the following variants of project :map:
- debugApiElements
- debugRuntimeElements
- releaseApiElements
- releaseRuntimeElements
Caused by: org.gradle.internal.exceptions.LocationAwareException: A problem occurred configuring project ':app'.
Caused by: org.gradle.api.internal.artifacts.ivyservice.DefaultLenientConfiguration$ArtifactResolveException: Could not resolve all files for configuration ':app:apt'.
at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration.rethrowFailure(DefaultConfiguration.java:1054)
该问题是升级android studio3.0+导致的。
解决:
打开Project->项目名->app->build.gradle
注释掉:
apply plugin: 'android-apt'
apt 'com.jakewharton:butterknife-compiler:8.2.1'
再注释掉project build.gradle中的:
classpath 'com.jakewharton:butterknife-gradle-plugin:8.4.0'
补充:
如果代码中使用了@BindView,则需要依赖butterknife库。
所以需要将上面删掉的apt 'com.jakewharton:butterknife-compiler:8.2.1'加回来,将apt改成annotationProcessor
问题解决!
原文链接:https://blog.youkuaiyun.com/u010117864/article/details/89204100
3.使用Android Studio调试安装到Android10.0 实机,显示解析安装包错误
android新版本大坑。权限设置太太太繁琐了。如果旧安卓版本可以运行,新版本Android不行,99%是新版本的权限需求。
老版本的安卓权限要求很低【官方:安全性欠佳】,新版本又有动态权限,又有包权限,这这那那的。
android.support.v4.content.FileProvider修改为
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="${applicationId}.fileProvider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths"/>
</provider>
然后再res文件夹下创建一个file_paths文件夹,设置path=“”
其实就是共享路径文件夹下面的所有文件。但是,没啥用,如果没有在线升级的功能,这个provider其实都不需要。
解决:android:appComponentFactory="" 不要为空,随便写个字符串即可。【调试时候会出现提示这里的字符串没找到之类的,但是不影响程序的正常运行,具体原因还不太清楚】
还需要在manifest.xml中增加权限:
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>
4.获取设备唯一的ID,Android 10
//下面的是旧版本Android (sdk<=7.0)可以使用,高版本(只试验了android10)下报错
TelephonyManager telephonyManager =(TelephonyManager)getSystemService(TELEPHONY_SERVICE);
String deviceId= telephonyManager.getDeviceId();
解决:先设置权限,这个权限会提示你危险。但是如果是单机开发者,问题不大吧。(如果是联网服务器的话,需要考虑安全性。)
<uses-permission android:name="android.permission.READ_PRIVILEGED_PHONE_STATE"/>
然后使用新的ID
String deviceId = Settings.System.getString(getApplicationContext().getContentResolver(), Settings.Secure.ANDROID_ID);
Log.e("ID_is",deviceId);//这句话就是先看看你的设备的ID是啥,得到了就String myId=“复制过来啊”
PS:这里有个坑!
问题:我在AS调试时候这个deviceId是“xxxxxxx”【某字符串x,并不是说都是x】,而且AS调试在实机上可以运行打开。但是,打包成apk,利用apk安装到手机中,就无法打开了,每次都是秒退。猜测可能无法识别我的设备ID。
解决:这个实机装机时候的deviceId竟然变了,竟然变成了“yyyyyyyy”【某字符串y】,我通过Toast把deviceId显示在屏幕上了)。【原因不清楚,以后有时间补充】。但是这个deviceId并不是随机的,感觉就是AS安装时候就给你一个id,实际apk安装的时候是另外一个id。【注:实机采用的是华为M6平板】
5.Android10悬浮窗
wm = (WindowManager)getApplicationContext().getSystemService(WINDOW_SERVICE);
params = new WindowManager.LayoutParams();
params.type = WindowManager.LayoutParams.TYPE_PHONE;
wm.addView(tv, params); //高版本这句报错的
WindowManager.LayoutParams.TYPE_PHONE 改成
WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY 即可。
6.解决编码GBK的不可映射字符问题
1.首先,在File->Setting界面,进入File Encoding中,设置如下:
2.在Project下的build.gradle下添加以下代码(不是app的那个)
tasks.withType(JavaCompile) {
options.encoding = "UTF-8"
}
3.如果上述办法不行,只能把代码用写字板之类的程序打开,重新转换编码。
To Be Continued