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乱码的现象。

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

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

//解码
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",参考代码如下:

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:name=".tools.App"
        android:roundIcon="@mipmap/ic_launcher_round"

        android:usesCleartextTraffic="true"

        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>


    </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()里添加如下代码:

            registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
                @Override
                public void onActivityCreated(Activity activity, Bundle bundle) {
                    Logger.i("App", "当前Activity="activity.getClass().getSimpleName());
                }

                @Override
                public void onActivityStarted(Activity activity) {

                }

                @Override
                public void onActivityResumed(Activity activity) {

                }

                @Override
                public void onActivityPaused(Activity activity) {

                }

                @Override
                public void onActivityStopped(Activity activity) {

                }

                @Override
                public void onActivitySaveInstanceState(Activity activity, Bundle bundle) {

                }

                @Override
                public void onActivityDestroyed(Activity activity) {

                }
            });

未完待续。。。

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

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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

生活家小毛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值