1. 程式人生 > >android 多渠道打包

android 多渠道打包

file device amp 多渠道 key repl 簡寫 name pro

android 多渠道打包

原理

在manifest文件中,application標簽內部設置不同的metadata標簽即可,可以通過java api獲取這個matedata內的值

友盟提供的多渠道打包技術

  1. 按照umeng的要求,在manifest文件中添加如下代碼

    <meta-data
               android:name="UMENG_CHANNEL"
               android:value="你自己申請的key" />
  2. 如果在value的地方寫死了一個值,會使得每次打包只能固定一個渠道,所以更改為如下方式

    <meta-data
               android:name="UMENG_CHANNEL"
               android:value="${UMENG_CHANNEL_VALUE}" />

    使用占位符,在build.gradle的android標簽內添加如下代碼,區分渠道信息。這個占位符和spring框架中的ognl表達式作用有點像

    productFlavors{
            huawei{
                manifestPlaceholders = [UMENG_CHANNEL_VALUE: "huawei"]
            }
            xiaomi{
                manifestPlaceholders=[UMENG_CHANNEL_VALUE: "xiaomi"]
            }
        }

    可以簡寫為以下內容

    productFlavors{
      huawei{
    
      }
      xiaomi{
    
      }
     }
     productFlavors.all { flavor ->
      flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
     }

    如果要包含版本信息,可以修改為如下配置

    productFlavors{
        huawei{
    
        }
        xiaomi{
    
        }
     }
     productFlavors.all { flavor ->
        flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
     }
     applicationVariants.all { variant ->
        variant.outputs.each { output ->
            def outputFile = output.outputFile
            if (outputFile != null && outputFile.name.endsWith(‘.apk‘)) {
                def fileName = outputFile.name.replace(".apk", "-${defaultConfig.versionName}.apk")
                output.outputFile = new File(outputFile.parent, fileName)
            }
        }
     }

    只有是在代碼中獲取渠道信息,方便發送到服務器進行數據統計

    private String getChannel() {
       try {
           PackageManager pm = getPackageManager();
           ApplicationInfo appInfo = pm.getApplicationInfo(getPackageName(), PackageManager.GET_META_DATA);
           return appInfo.metaData.getString("UMENG_CHANNEL");
       } catch (PackageManager.NameNotFoundException ignored) {
       }
       return "";
    }

附加小知識

當電腦連接了多個android設備的時候,使用adb shell時進入不同的設備,可以添加參數

adb -s 序列號 install/shell 等命令

查看序列好

adb devices

顯示結果的第一列就是序列號

android 多渠道打包