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-guijd-gui很有可能會打不開

解決辦法:
1)使用 dex2jardex2jar官方下載地址
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,謝謝。

Ps:著作權歸作者所有,轉載請注明作者, 商業轉載請聯系作者獲得授權,非商業轉載請注明出處(開頭或結尾請添加轉載出處,添加原文url地址),文章請勿濫用,也希望大家尊重筆者的勞動成果

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,238評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,430評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,134評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,893評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,653評論 6 408
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,136評論 1 323
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,212評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,372評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,888評論 1 334
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,738評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,939評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,482評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,179評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,588評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,829評論 1 283
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,610評論 3 391
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,916評論 2 372