在同一台android設備上安裝多個同一項目的apk


前言

通常我們在一台android設備上(無論是真機還是模擬器),安裝相同包名的apk應用都只能安裝一個應用,如果設備上已經安裝了一個apk,如何再次安裝這個apk就會覆蓋前面的應用,如果想要安裝在同一台設備上安裝多個相同的apk,唯一的辦法只能是改包名了。簡單的項目還好,當個一個項目中有許多的類的時候,手動去更改包名一定是一種不可取的方式。那么有沒有什么簡單的辦解決呢?

解決辦法:

在app下面的bulid.gradle中添加如下代碼:

buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
        debug {
            applicationIdSuffix ".free"
        }
    }
}

沒錯,你可以看到applicationIdSuffix ".free"這一行關鍵的代碼。就是這一句代碼,使得我們的包名變成了packageName.free,比如:我們包名是com.myApp,加上這句后,生成的apk的包名就會變成com.myApp.free,這里的free可以根據自己的打包用途來命名。
上這種方式就是BuildTypes,可以在下面的圖中看到:


 

 

 

在這里插入圖片描述

另外一種方式Flavors

productFlavors {
    pro{
        applicationIdSuffix ".pro"
    }
    free {
        applicationIdSuffix ".free"
    }
}

或者:

productFlavors {
    pro {
        applicationId = "com.myApp.pro"
    }
    free {
        applicationId = "com.myApp.free"
    }
}

 

 

這時候使用Build Variants就可以選擇自己需要打包的版本

下面是我生成的apk

手機上安裝的應用:

上面三個應用都是同一個項目,只是經過處理后,就都可以在同一台設備上安裝了(因為這是三個的包名是不相同的)。
需要注意的是:

productFlavors {
   pro {
       applicationId = "com.myApp.pro"
   }
   free {
       applicationId = "com.myApp.free"
   }
}
buildTypes {
   release {
       minifyEnabled false
       proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
   }
   debug {
       applicationIdSuffix ".test"
   }
}

如果同時使用兩種方式,buildTypes 中的設置后綴會跟在productFlavors 中設置的包名后面,這時候包名就會變成com.myApp.pro.test和com.myApp.free.test.
Ok這時我們就可以在同一台設備上安裝多個同一項目的apk了

總結:

Application ID可以說是一個android項目的唯一標識,是不可修改的,在android studio中的bulid.gradle下,如下:


android {
   compileSdkVersion 25
   buildToolsVersion "25.0.2"
   defaultConfig {
       applicationId "com.myApp"
       minSdkVersion 15
       targetSdkVersion 25
       versionCode 1
       versionName "1.0"
       testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}

 

並且Application ID和package的屬性值不一樣的,雖然不一樣,但是當我們在構建項目的時候,會復制Application ID給package的屬性值,並且這個屬性值是唯一的,package屬性才是真正作為您應用程序唯一身份憑證。

當我們打開apk中的AndroidMainifest.xml文件時就可以看到,package和我們設置的一樣了。
這就是為什么可以在同一台設備上安裝的原因。
如何我們的apk已發布,這個項目的包名就是不可修改的了,不過我們一般也不會輕易修改包名。



在主app的build.gradle里面添加
android {
    compileSdkVersion 26
    buildToolsVersion '26.0.2'
    defaultConfig {
        applicationId "com.xxx.www.xxx"
        minSdkVersion 16
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

    //版本名后面添加一句話,意思就是flavor dimension 它的維度就是該版本號,這樣維度就是都是統一的了
flavorDimensions "versionCode" }

否則會報

Error:All flavors must now belong to a named flavor dimension.Learn more at https

 

 
 

作者:聖劍Jay
鏈接:https://www.jianshu.com/p/95d0e3493429/
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯系作者獲得授權並注明出處。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM