安卓小问题

本文涵盖Android开发中遇到的各类问题,包括图片资源命名规范、Modules编译错误、调试安装问题、设备唯一ID获取、悬浮窗实现及编码问题解决。提供详尽的步骤与代码示例,帮助开发者快速定位并解决问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值