• Android开发常见问题收集(长期更新)


    前言:

    这是笔者在开发过程中遇到的一些问题,现记录成文案,方便日后查阅使用节约时间

    问题1:Android studio3.0 com.android.tools.aapt2.Aapt2Exception: AAPT2 error?

    解决此问题的办法是:在工程根目录下新建gradle.properties文件(如果没有就创建、有该文件就不用创建)、新增 android.enableAapt2=false 即可解决

    问题2:如何打aar包?

    1:鼠标选中项目中的库module(也就是 apply plugin: 'com.android.library')
    2:开发工具-选项卡-Build-Rebuid project (开始打包)
    3:打包完毕后,项目切换成Project模式 在库module下面的build文件夹\outputs\XXX.aar 这里的xxx就是库module生成的aar包

    问题3:导入别人项目无法下载对应的Gradle?

    1:找到该项目中的gradle-wrapper.properties文件,找到里面的distributionUrl,举例:distributionUrl=https://services.gradle.org/distributions/gradle-4.1-all.zip
    其中,这个项目对应gradle的版本就是4.1
    2:Gradle官方下载地址
    去Gradle官网下载all结尾的压缩包(对应的版本号就是该项目distributionUrl中申明的版本号,参考上例就是4.1), 将下载的zip文件放入以下地址C:\Users\你的用户名.gradle\wrapper\dists\gradle-1.12-all\2apkk7d25miauqf1pdjp1bm0uo
    3:如果该文件夹下有其他文件(第一次编译别人项目,系统会自动下载,但是下载后可能会失败,所以该文件夹会多出两个文件),删除即可。将完整的zip文件放入该文件目录下,注意无需解压。
    4:(Linux gradle文件的存放位置为:~/.gradle/wrapper/dists/)

    问题4:项目可以正常编译但R文件爆红?

    1:重启Android Studio
    2:Clean Project
    3:Android Studio工具栏->Help -> Edit Custom Properties -> create custom properties?(yes) ->添加 idea.max.intellisense.filesize=5000 然后重启
    4:有人说升级Android Studio的版本 这样貌似代价有点大,我没有尝试
    5:上述几种方案都试过了笔者这边(Android Studio版本为3.2)的R文件爆红现象依旧没有解决,最后有个小仙女推荐,改变项目 build.gradle里面的gradle版本号,改成
    classpath 'com.android.tools.build:gradle:3.2.1' 最后完美解决

    问题5:项目编译成功,小米手机却无法安装(另外一台手机就可以安装运行),提示如下:

    小米手机安装失败

    1:打开小米的开发者模式,允许手机调试
    2:登录小米账号
    3:关闭MIUI优化

    问题6:Url问题

    因为Http请求是不接受中文参数的,所以发送的时候使用URLEncoder.encode进行编码,接收的时候使用URLDecoder.decode解码,按照指定的编码格式进行编码、解码,这样才可以保证不会出现Url乱码的现象。

    1. //编码
    2. URLEncoder.encode(String s, String enc)

    使用指定的 编码 机制将字符串转换为 enc 格式

    1. //解码
    2. URLDecoder.decode(String s, String enc)

    使用指定的 解码 机制将字符串转换为 enc 格式

    问题7:Android9.0-Webview问题

    在Android9.0系统上,Webview不做处理可能会报错,报错如下:

    9.0-Webview报错

    原来从Android 9.0(API-28)开始,默认情况下禁用明文支持。所以http的url如果不做处理,则无法在webview中加载。

    解决办法:
    在AndroidManifest.xml文件中的Application标签添加android:usesCleartextTraffic="true",参考代码如下:

    1. <application
    2. android:allowBackup="true"
    3. android:icon="@mipmap/ic_launcher"
    4. android:label="@string/app_name"
    5. android:name=".tools.App"
    6. android:roundIcon="@mipmap/ic_launcher_round"
    7. android:usesCleartextTraffic="true"
    8. android:supportsRtl="true"
    9. android:theme="@style/AppTheme">
    10. <activity android:name=".MainActivity">
    11. <intent-filter>
    12. <action android:name="android.intent.action.MAIN" />
    13. <category android:name="android.intent.category.LAUNCHER" />
    14. </intent-filter>
    15. </activity>
    16. </application>

    问题8:Android8.0及8.0系统以上icon处理

    从Android 8.0系统开始,应用程序的图标被分为了两层:前景层和背景层,所以,在设计应用图标的时候,需要将前景和背景部分分离,前景用来展示应用图标的Logo,背景用来衬托应用图标的Logo。如果UI只给我们一张icon图,那么需要进行适配,这里给出具体方案,不需要去麻烦UI在切图,自己手动生成8.0适配icon

    准备工作:一张应用icon图、Android studio 开发工具

    Android studio --》File --》New --》Image Asset 点击后看到如下界面:

    Asset Studio

    这里的Path 就是icon的路径,BackGround Layer 可以指定颜色,

    下面注意!!!

    在预览区域中给出了可能生成的图标形状,包括圆形、圆角矩形、方形等等。注意每个预览图标中都有一个圆圈,这个圆圈叫作安全区域,必须要保证图标的前景层完全处于安全区域当中才行,否则可能会出现图标被手机厂商的mask裁剪掉的情况。

    设置好以后,点击Next,即可自动生成8.0系统的圆角icon

    问题9:Apk反编译的那点事情

    反编译流程:
    1): 把apk 改成 .zip 格式 然后解压 ;
    2): 解压,即可看到dex文件 (特别注意,dex可能会有多个,如下图,就有2个dex)

    多个dex


    3):如果把 dex 文件,直接修改文件后缀 成 .jar ,接着把修改后的.jar文件放进 jd-gui , jd-gui很有可能会打不开

    解决办法:
    1)使用 dex2jar 、 dex2jar官方下载地址
    2)这个地址不用翻墙、下载后,解压,然后将之前解压出来的dex文件 放进该文件夹内,操作如下:

    classes.dex放置到dex2jar文件夹内部


    3)在文件夹内部打开命令行窗口(窗口的路径参看下图):输入命令行: d2j-dex2jar.bat classes.dex

    命令行操作

    命令行说明:

    有朋友私底下问我,说 作者你的命令行我怎么用不了啊,其实是使用姿势有些小偏差:

    1)命令行里的 d2j-dex2jar.bat 代表的就是蓝色矩形对应的内容,如果你修改了bat的文件名,上面的命令行也需要改成你对应的bat文件名,直接粘贴上面的命令行当然是不生效的!

    2)命令行里的 classes.dex 代表的就是黄色矩形对应的内容,也就是我们需要解析的dex,如果你修改了dex的文件名,同理,也需要改变命令行!

    3)最后,图上的红色矩形是命令行操作完以后生成的jar文件,使用红色矩形内的jar文件 ,打开 jd-gui ,导入该 jar 文件即可显示源码(亦可检测混淆是否生效等等)

    4)如果出现多个dex文件,建议逐个操作,这样会比较稳(命令行也需要注意dex文件名)

    5)嫌麻烦也可以使用别的反编译工具,这里就不推荐了

    问题10:Android studio3.1编译项目不通过,出现: Removing unused resources requires unused code shrinking to be turned on.

    解决方法:
    AS 3.0.1版本以后,如果使用shrinkResources来移除未引用资源,首先必须要先开启混淆minifyEnabled,开启混淆以后才能通过资源压缩器将它们移除,否则编译会报错。

    因此,如果在编译项目的时候,如果将minifyEnabled 设置为 false ,shrinkResources 设置为true 就会编译不通过。所以,如果想要 移除未引用资源,首先需要将 minifyEnabled 设置 true,才可以正常编译。

    问题11:Git合并分支提示“Already up-to-date”

    git 本地分支合并master分支代码,在Android studio 合并,提示 git merge Already up-to-date
    原因在于merge之前,master分支的代码不是最新代码
    1,应该先切换到master分支
    git checkout master
    2,拉取远程代码
    git pull origin master
    3,再切换到想要合并master的分支
    git checkout 分支
    4,本地分支合并master代码
    git merge master
    Ps:有冲突则解决冲突
    ————————————————

    问题12:Git快速提交文件到远程仓库

    git init(省略) git clone(省略)
    git add . (注意这里需要空格 英文字符.)
    git commit (提交到暂存区)
    :a (输入提交信息)
    然后esc(进入编辑模式)
    输入完 :wq (保存编辑操作退出)
    git push (推送代码)

    问题13:如何快速查找当前页面Activity

    在自定义Appliction - onCreate()里添加如下代码:

    1. registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
    2. @Override
    3. public void onActivityCreated(Activity activity, Bundle bundle) {
    4. Logger.i("App", "当前Activity="activity.getClass().getSimpleName());
    5. }
    6. @Override
    7. public void onActivityStarted(Activity activity) {
    8. }
    9. @Override
    10. public void onActivityResumed(Activity activity) {
    11. }
    12. @Override
    13. public void onActivityPaused(Activity activity) {
    14. }
    15. @Override
    16. public void onActivityStopped(Activity activity) {
    17. }
    18. @Override
    19. public void onActivitySaveInstanceState(Activity activity, Bundle bundle) {
    20. }
    21. @Override
    22. public void onActivityDestroyed(Activity activity) {
    23. }
    24. });

    未完待续。。。

    如果这篇文章对您有开发or学习上的些许帮助,希望各位看官留下宝贵的star,谢谢。

    原文Android开发常见问题收集(长期更新) - 简书

  • 相关阅读:
    创芯科技USB_CAN【库文件】
    C++——虚函数、虚析构函数、纯虚函数、抽象类
    redis 安装
    YOLOv8-seg改进:注意力系列篇 | 一种简单有效的可变形的自注意力模块DAT | CVPR 2022
    动态代理(java模拟生活中的代理)
    关于使用NodeJS+Express搭建服务器访问静态资源的一些填坑经验
    【前端】CSS(3) —— CSS的盒模型与弹性布局
    搜索引擎项目
    概率分析介绍
    数据结构与算法-腾讯面试题单向链表的翻转
  • 原文地址:https://blog.csdn.net/weixin_45892228/article/details/127733688