Home PC Games Linux Windows Database Network Programming Server Mobile  
  Home \ Programming \ Use Android Studio and Gradle packaged multi-version APK     - Ten to improve the efficiency of the Linux bash tricks (Linux)

- The strings in Python reside (Programming)

- blecat: Bluetooth Gadgets (Linux)

- ssh using scp: / directory: Permission denied (Server)

- Oracle11g Trigger Debugging Record Error: PLS-00201: identifier SYS.DBMS_SYSTEM 'must be declared (Database)

- Use MySQL optimization of security to prevent misuse of aliases (Database)

- RHEL 6.4 installed MySQL 5.6.27 (Database)

- Linux 64-bit porting (Programming)

- Linux compression and decompression command (Linux)

- Fedora && Arch Linux - the most romantic thing to happen now (Linux)

- Java in the inverter and covariance (Programming)

- Linux atomic operations and synchronization mechanisms (Programming)

- Use 3G wireless network card under Linux (Linux)

- Varnish achieve page jump (Server)

- To access an Oracle database using Instant Client (Database)

- Build Python3.4 + PyQt5.5.1 + Eric6.1.1 development platform under Mac OS X 10.11.1 (Server)

- Oracle data row split multiple lines (Database)

- git checkout generated in the use of temporary br (Linux)

- Wireshark basic introduction and learning TCP three-way handshake (Linux)

- CentOS7 install JAVA notes (Linux)

  Use Android Studio and Gradle packaged multi-version APK
  Add Date : 2018-11-21      
  In the project development process, there is often a need to package different versions of APK needs. For example, debug version, release version, dev version and so on. Sometimes different versions to use a different domain name server api is not the same. For example debug_api.com, release_api.com, dev_api.com like.

Different versions corresponding to different api domain may also correspond to different icon and the like.

If every time we have to modify the package before manually modified so that it is not convenient enough.

But if we use Android Studio and Gradle, this trouble can easily be omitted.

Here's how: add the following code to open build.gradle (Module in) the android next node in Android Studio

buildTypes {

    // The name of the custom here, the case is not required
    release {
        // Here is the addition of a suffix applicationId in. So "." To add
        applicationIdSuffix ".release"
        // Here is to select whether obfuscated code
        minifyEnabled false
        proguardFiles getDefaultProguardFile ( 'proguard-android.txt'), 'proguard-rules.pro'

    dev {
        applicationIdSuffix ".dev"
        minifyEnabled false
        proguardFiles getDefaultProguardFile ( 'proguard-android.txt'), 'proguard-rules.pro'


// Here for different versions had set some special parameters, and buildType not directly related.
// For example: Use buildType the dev version, you can also use custom parameters flavors_release set up inside. This requires the development in accordance with their own needs.
productFlavors {

// Custom name but not the same as above buildType, or Gradle compilation fails. As used herein, a "flavors_" prefix to distinguish.
    flavors_release {
    // ManifestPlaceholders wrote of "str", "package_name" does not support the use of capital letters, otherwise Gradle compiler will not pass.
    // Set variable here can be used directly in the "AndroidManifest.xml", the use of: $ {package_name}
    // Android: label = "$ {package_name}"
        manifestPlaceholders = [str: "releaseStr", package_name: "com.sunhz.mvptest.release"]

        // Parameter here is to use java code, the specific use is:. Context.getResources () getString (R.string.strKey);
        resValue ( "string", "strKey", "releaseStrValue")

    flavors_dev {
        manifestPlaceholders = [str: "devStr", package_name: "com.sunhz.mvptest.dev"]

        resValue ( "string", "strKey", "devStrValue")

After completion of the above settings, where we want to use it?

Use the following manner: In Android Studio toolbar, find the "Build" items, find the "Generate Signed APK ..."

Select Module -> Create APK key, or enter the password APK key -> The key here!

In the "BuildType" field, you select two BuildType we set in build.gradle in, respectively, releas, dev, debug. Wherein the "debug" comes to Android Studio.

In the "Flavors" at select two Flavors we set in build.gradle in order to facilitate direct use parameters defined in the build.gradle customized.

and so! Above I have mentioned that, buildType and Flavors no direct contact. They can be used in conjunction with each other according to user needs. As shown above, BuildType selected release, but Flavors choice is flavors_dev.

This basic use on all finished.

There is a problem, playing out different versions of the package, all can be installed on the same phone, all the two packets and can be published to Google's market upswing Why is this?

Here we must mention "applicationIdSuffix" attribute in BuildType we set up, according to the literal translation of this attribute is: "applicationId suffix", then there comes a question, "What is applicationId" is the? In fact, this "applicationId" attribute, in fact, after the completion of the project to create a presence in the build.gradle. In defaultConfig node node under the android. And the same default applicationId and in AndroidManifest.xml package properties.

We can see, the default value of these two properties are the same.

applicationId and they packageName What is the relationship?

After the project is created by default, both the same. If you need to build different versions of APK according to different needs, then we set up "applicationIdSuffix" can do it.

There is a noteworthy phenomenon.

For example, we use a dev type when packaged, packaged software is installed out of the APK to your phone.

Use the following code to get packageName all the programs on our phone.

PackageManager packageManager = mContext.getPackageManager ();
List packageInfoList = packageManager.getInstalledPackages (PackageManager.GET_PERMISSIONS);
List packageNameList = new ArrayList ();
for (PackageInfo packageInfo: packageInfoList) {
    packageNameList.add (packageInfo.packageName);
We print out the information in the package name will appear com.spencer_dev.test.dev. Com.spencer_dev.test did not appear.

but! If decompile tool, APK package decompile directly view the source code, java code where the src directory of the package name, and also, as we have set for com.spencer_dev.test. The package can AndroidManifest.xml and BuildConfig class APPLICATION_ID has become com.spencer_dev.test.dev.

applicationId packageName and what they each represent?

According to the above results, it, package represents the java code package. applicationId represents a unique identification applications. And signed application and other applications together to distinguish different. I think this is why Google market reason to allow the same application of different applicationId.
- Beautiful start Ubuntu installation tool Duck Launcher 0.64.5 (Linux)
- To install CentOS 6.5 on your hard drive under Windows 7 (Linux)
- Linux Network Programming - raw socket instance: MAC header message analysis (Programming)
- How to install or upgrade to the Linux kernel in Ubuntu 4.2 (Linux)
- Rails 4.1.6 start being given Could not find a JavaScript runtime (Linux)
- Linux atomic operations and synchronization mechanisms (Programming)
- How to make GRub instead of the default Ubuntu software center (Linux)
- Nginx concerning the location and rewrite applications proxy_pass (Server)
- Spring AOP custom annotation way to achieve log management (Programming)
- Linux System Getting Started Learning: From VirtualBox from the client host access NAT (Linux)
- Hibernate + JUnit test entity class generate database table (Programming)
- Linux batch copy data script (Linux)
- How to build Mono 3.4.0 / 3.4.1 on Windows (Linux)
- Error: Unable to establish connection with FTP SFTP server (Server)
- Observation network performance tools for Linux (Linux)
- Linux iptables: Composition Rules (Linux)
- Linux installed xdotool simulate keystrokes and mouse movements (Linux)
- Ant command-line compiler Android project (Programming)
- MySQL high availability cluster fragmentation of deployment uses Cobar (Database)
- MySQL various log summary (Database)
  CopyRight 2002-2020 newfreesoft.com, All Rights Reserved.