Android applicationId和包名的區(qū)別總結(jié)
應(yīng)用ID與包名區(qū)別
每個(gè)Android應(yīng)用都有一個(gè)唯一的應(yīng)用ID.在Android設(shè)備和市場(chǎng)上,這個(gè)ID是你應(yīng)用的唯一標(biāo)識(shí).若想在市場(chǎng)上更新應(yīng)用,新應(yīng)用的ID必須和原來apk的應(yīng)用ID一致.所以一旦發(fā)布了應(yīng)用,就不能再改變應(yīng)用ID.
在Eclipse中沒有applicationId這個(gè)概念,在Eclipse中applicationId即等同于包名。但是到了Android Studio中,這兩個(gè)概念做個(gè)區(qū)分。包名的定義在清單文件中:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.myapplicationtest" >
應(yīng)用ID是在moudle層的build.gradle中定義,applicationId值即為應(yīng)用ID,如下所示:
android { defaultConfig { applicationId "com.example.myapplicationtest" minSdkVersion 15 targetSdkVersion 24 versionCode 1 versionName "1.0" } ... }
但是,在Android Studio中創(chuàng)建一個(gè)新項(xiàng)目時(shí),applicationId默認(rèn)是和項(xiàng)目的包名一致的。所以常常有開發(fā)者會(huì)將兩者混淆,以為它們是一個(gè)概念。實(shí)際上,應(yīng)用ID和包名是相互獨(dú)立的。改變包名不會(huì)影響應(yīng)用ID,反之亦然。
通常Android的應(yīng)用ID與包名是綁定的,所以在Android API中,一些方法和參數(shù)從名稱上看似乎它們返回的是包名,事實(shí)上它們返回的是應(yīng)用ID值.例如,Context.getPackageName()
方法返回的是應(yīng)用ID,而不是包名。不信我們來看:
圖中,包名是:com.example.myapplicationtest
應(yīng)用ID:com.example.myapplicationtest.id
在MainActivity中調(diào)用如下代碼:
String applicationId = this.getPackageName();Log.i("TESTKIM","applicationId:" + applicationId);
打印日志文件,如下:
- 應(yīng)用ID的命名并不是隨意的,它至少需要需遵循以下限制:
- 應(yīng)用ID至少包含兩部分(也就是說至少有一個(gè)點(diǎn),如com.example);
- 每部分必須以字母開頭;
- 所有字符必須是字母數(shù)字或者下劃線[a-zA-Z0-9_]
注意:
如果你使用了webview,請(qǐng)使用包名作為應(yīng)用ID的前綴,否則,有可能會(huì)報(bào)錯(cuò).
應(yīng)用ID用處
應(yīng)用ID除了唯一標(biāo)識(shí)了應(yīng)用,那么它在開發(fā)過程中可以有哪些用處呢?
試想一下,當(dāng)我們開發(fā)應(yīng)用的時(shí)候,要在一臺(tái)測(cè)試機(jī)上同時(shí)裝上開發(fā)版和發(fā)布版,如何才能做到呢?其實(shí)很簡(jiǎn)單,只要讓開發(fā)版的應(yīng)用ID與發(fā)布版不一致即可。所以,只需要在buildTypes中修改開發(fā)版的應(yīng)用ID就行。如下:
android { ... buildTypes { debug { applicationIdSuffix ".debug" //等同于“com.example.myapplicationtest.debug” } } }
上面代碼中,將debug版的應(yīng)用ID在原來應(yīng)用ID后追加“.debug”。applicationIdSuffix代表了默認(rèn)的應(yīng)用ID,即為defaultConfig中applicationId的值。所以,debug版的應(yīng)用ID為:”com.example.myapplicationtest.debug”.
另外,有時(shí)我們發(fā)布到市場(chǎng)的應(yīng)用希望有不同的版本,比如:免費(fèi)版和收費(fèi)版。這就需要我們來構(gòu)建不同的應(yīng)用變體。那么我們可以在productFlavors中進(jìn)行相應(yīng)的配置,來生成不同的應(yīng)用。如:
android { defaultConfig { applicationId "com.example.myapplicationtest" } productFlavors { free { applicationIdSuffix ".free" } paid { applicationIdSuffix ".paid" } } }
在上面的代碼中,我們用”free”表示免費(fèi)版,用”paid”表示付費(fèi)版。在productFlavors中,通過配置不同應(yīng)用ID,最終生成不同的應(yīng)用。最終這兩種應(yīng)用apk可同時(shí)存在于市場(chǎng)中。
修改包名
默認(rèn)情況下,包名與應(yīng)用ID是相同的。當(dāng)然,開發(fā)者也可以對(duì)包名進(jìn)行修改.如果開發(fā)者想要修改包名的話,注意項(xiàng)目目錄結(jié)構(gòu)必須與AndroidManifest.xml中package屬性的包名一致.
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.myapplicationtest" android:versionCode="1" android:versionName="1.0" >
package值有兩個(gè)作用:
它為R.java文件提供了命名空間,例如R class的包名為com.example.myappcationtest.R
決定manifest中聲明的class的相對(duì)名稱。如:manifest中聲明的 的真實(shí)路徑為:com.example.myapplicationtest.ManiActivity
如果開發(fā)者想修改包名,必須確保manifest中package值也做了同步修改.
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
Android Studio手動(dòng)配置Gradle的方法
Gradle:Gradle是一個(gè)基于Apache Ant和Apache Maven概念的項(xiàng)目自動(dòng)化建構(gòu)工具。它使用一種基于Groovy的特定領(lǐng)域語(yǔ)言(DSL)來聲明項(xiàng)目設(shè)置,拋棄了基于XML的各種繁瑣配置,本文給大家介紹Android Studio手動(dòng)配置Gradle的方法,一起看看吧2017-11-11Android自定義View仿微博運(yùn)動(dòng)積分動(dòng)畫效果
這篇文章主要為大家詳細(xì)介紹了Android自定義View仿微博運(yùn)動(dòng)積分動(dòng)畫效果,開啟了自定義view學(xué)習(xí)旅程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-05-05Android View移動(dòng)的六種方法小結(jié)
在android開發(fā)中,經(jīng)常會(huì)遇到一個(gè)view需要它能夠支持滑動(dòng)的需求。下面通過本篇文章給大家介紹android view移動(dòng)的六種方法,對(duì)android view移動(dòng)相關(guān)知識(shí)感興趣的朋友一起學(xué)習(xí)吧2015-12-12android xml實(shí)現(xiàn)按鈕的圓角、陰影效果及按下變化效果的實(shí)現(xiàn)代碼
這篇文章主要介紹了android xml實(shí)現(xiàn)按鈕的圓角、陰影效果以及按下變化效果,通過五個(gè)xml文件實(shí)現(xiàn)按鈕的圓角陰影效果,代碼也很簡(jiǎn)單,需要的朋友可以參考下2021-05-05Android編程中Handler原理及用法實(shí)例分析
這篇文章主要介紹了Android編程中Handler用法,結(jié)合實(shí)例形式分析了Handler的功能,原理及使用技巧,需要的朋友可以參考下2016-01-01Android開發(fā)之AlarmManager的用法詳解
這篇文章主要介紹了Android開發(fā)之AlarmManager的用法,是Android應(yīng)用開發(fā)中非常實(shí)用的技能,需要的朋友可以參考下2014-07-07Android 百度地圖marker中圖片不顯示的解決方法(推薦)
下面小編就為大家分享一篇Android 百度地圖marker中圖片不顯示的解決方法(推薦),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-01-01