Android開發中容易被忽視的一些注意事項

2021-09-01 18:53:40 字數 1728 閱讀 1757

一、謹慎選擇包名

包名 (package name) 就相當於一款應用在戶口本上登記的名字,是系統用來區分不同應用的字段。重複的包名會被認為是同一款應用,不能同時安裝在乙個系統裡。一般來說,包名建議使用網域名稱反序。比如豌豆莢的**網域名稱是 www.wandoujia.com,那麼豌豆莢的一系列 android 應用的包名就是 com.wandoujia.***。這種約定俗成的辦法可以最大程度地避免「撞名」的事故。

案例一某個手機 erp 客戶端的開發者,在開發應用時使用了 adobe 的工具,同時也參考了 adobe 的官方教程,從而將應用命名為 air.main 這樣的通用包名,跟另乙個遊戲重名了。於是,在公升級的過程中就產生了混亂……所以取名要慎重啊!

案例二二、一款應用只應該有乙個簽名

簽名檔案就相當於開發者的「身份證」,我們平時生活中應該只有一張身份證,那麼在手機裡也一樣,簽名也應該是唯一的。而且因為簽名的加密機制,使複製和偽造簽名變得幾乎不可能,所以「豌豆洗白白」也是將簽名作為判斷是否官方版的最主要標準之一。

如果乙個應用使用了不同的簽名,那麼對於使用者來說,可能會造成應用無法公升級,因為 android 系統會在公升級應用的過程中比對簽名,不同的簽名無法公升級。如果使用者選擇強制公升級的話,因為簽名不同,所以需要先解除安裝舊版再安裝新版,那麼之前存在本地的應 用資料、遊戲記錄等也會直接丟失。

案例一就好像我們會不小心弄丟身份證,開發者也會不小心弄丟簽名檔案。我們曾遇到過四五例類似的例子,開發者找上門來說要求更換簽名,原來是因為工程師離職把簽名檔案帶走了,老闆要不回來了,只好把原來的簽名也全都改一遍。所以簽名檔案要保管好啊!

案例二我們曾經統計過,網遊「我叫 mt」在各大市場上一共有 48 種不同的簽名。據「我叫 mt」的開發者說,他們是通過不同的簽名來區分不同的渠道的,而一共放出過多少種簽名難以統計。這麼多個不同的簽名檔案,除了自己管理起來非常麻煩之外, 也給使用者的公升級過程帶來了困擾,一不小心公升級到了不同簽名的版本上,遊戲記錄就全部丟失了。

android 簽名機制的目的是為了檢驗應用是否被人更改過,而不是為了讓你區分渠道的。那麼正常來說應該用什麼方法來區分渠道呢?請看下一條。

三、使用 xml 配置檔案來區分渠道

一般來說,我們在 android manifest 檔案中使用 meta-data 來區分渠道。例如:

每次正式打包完成後,修改 android:value,再重新打包即可生成乙個新的渠道包,所以:

不要再用簽名來區分渠道了!

四、正確填寫版本號

在 android 應用中,有兩個引數與版本號相關。其中,version name 表示版本名稱,是字串,version code 表示版本號,是整型數字。

一般來說,使用者直**到的是 version name,所以這裡應該填寫形似「4.15.1」這樣的版本號。而真正用來判斷新版本舊版本的引數是 version code。在應用發布第乙個版本的時候,version code 應該填 1,然後每次發布的時候都遞增,這樣才是以規範的格式告訴各大市場你的應用的更新程度。

有的開發者在 version code 上非常隨意,這個版本發布的時候碰上結婚紀念日,於是用老婆的生日當 version code;下個版本發布的時候運氣不太好,於是用自己的幸運數字當作 version code……這樣在使用者看來的結果就是,明明從官網安裝了最新的 2.2.0 版本,可是各大市場卻提醒「公升級到 2.1.3 版本」,越公升級版本號越小了。

以上四件小事,雖然都比較瑣碎,而且沒什麼技術含量,但卻是很多入門的 android 開發者容易忽略的問題。希望本文能幫助廣大開發者,在寫出好應用的同時,避免這些「坑」給應用帶來不必要的損失。

容易被忽視的synchronized

public static final synchronized callmanager getinstance return minstance synchronized,多執行緒訪問同步鎖,具有以下特性 1 同一時間只允許乙個執行緒訪問 2 在乙個執行緒訪問synchronized 塊時,另乙個...

sql 容易被忽視的點

1 dual select查詢語句只有 select 就可以,但為了規範,湊結構,可以加個 dual 例 select now from dual 這個概念是oracle中的。在mysql中可寫可不寫。2 drop,delete truncate 的區別drop用於刪除資料庫,資料表的字段,刪除表 ...

C reference 那些容易被忽視的細節

工作之餘做個小結。te為實體型別,td為推斷型別 引用建立時即初始化賦值。作為函式引數時,程式進入函式就已經初始化完畢。注意區分值與值的引用。一旦創造了te t右值引用便有了別名,t的行為變成左值 傳入td 模板為左引用,但t列印出的型別依然為右值引用是別名,構造好的引用可當作自身,引用之間的非初始...