编译时动态配置 Android resValue / BuildConfig / Manifest

本文参考并得益于我的朋友 @linroid 的文章:《xip.io + gradle 在调试时动态设置服务端地址》,他写得很好,于是我将在这里写得更普适、完整一点,感谢与分享!

当我在修改 telegram 源码的时候,我需要提供 2 个版本,一,我自己的版本,二,分享给大家顺便使用的版本。其实二者唯一的差别就是 App 名称不一样,我自己的版本我想叫「Tel4Drakeet」,但分享给别人,叫这个名字可能不太合适。

因此,我如果每次手动修改再进行编译,显然很麻烦。于是想到借助 gradle,想到林的那篇文章,原本我只知道 buildConfigField 和类似友盟多渠道打包那样,修改清单文件内容 manifestPlaceholders,但这两种都不是我现在想要的,我要的是能够修改 res value 的方式,比如修改 strings.xml 文件中的 AppName 的值。

在林的文章中正好找到这点,貌似在整个互联网上并不容易找到。所以我要总结记录下来:

使用 gradle 在编译时动态配置 Android resValue

在你的 gradle 内容 buildTypes 或者 productFlavors 下面,如 release 体内写上类似:

resValue "string", "AppName", "Tel4Drakeet"

意为把名为 AppName 的 string value 值改为 Tel4Drakeet,完整地和多个 buildType 结合可以参考我的 Tel4Drakeet 的 gradle 文件。

使用 gradle 在编译时动态设置 Android BuildConfig

在同上的地方写上:

buildConfigField "String", "ENDPOINT", "\"http://example.com\""

gradle sync 一下后,BuildConfig.ENDPOINT 就会被赋值为 http://example.com 就可以供 Java 代码调用了。

使用 gradle 在编译时动态设置 Android Manifest

我们在使用友盟多渠道打包的时候,有这么种方式可以在编译的时候动态修改清单文件中的内容,从而实现不同渠道不同标识值。

你需要在 AndroidManifest.xml 中,对友盟的渠道进行如下配置:

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

然后在你的 product flavor 中写上:

manifestPlaceholders = [UMENG_CHANNEL_VALUE: "GooglePlay"]

完整 gradle 文件可以参考我的这个项目:妹纸&gank.io. 这样清单文件中原本预设的 ${UMENG_CHANNEL_VALUE} 这个值就会被替换为”GooglePlay”。如果要和 Java 配合调用,就是如上所示,结合访问 meta-data 即可,这里不展开了。

🙂

  1. Pingback: trump

  2. Pingback: Skrota bilen Göteborg

  3. Pingback: saizen for sale

  4. Pingback: Bilskrot Göteborg

  5. Pingback: kid fights inmate on beyond scared straight

  6. Pingback: drive with uber

  7. Pingback: download free

  8. Pingback: ben affleck steroids

  9. Pingback: Print Media

  10. Pingback: http://www.godwinsremovals.co.uk/international-removals/northern-ireland

  11. Pingback: Denver Uber

  12. Pingback: click here to hire an injury lawyer

  13. Pingback: http://britlock.com.au

  14. Pingback: nolvadex pct side effects

  15. Pingback: M88

  16. Pingback: dragon pharma cut mix

  17. Pingback: computer kopen doetinchem

  18. Pingback: dryer vent cleaning companies near me

  19. Pingback: primobolan bayer

  20. Pingback: joseph shihara rukshan de saram

  21. Pingback: joseph shihara rukshan de saram

  22. Pingback: economics tuition

  23. Pingback: para kazanmak

  24. Pingback: lyingcunts

  25. Pingback: sell.it

  26. Pingback: ankara escort

  27. Pingback: kryptodyne

  28. Pingback: Best Newspaper in India

  29. Pingback: Trisha on Times of India

  30. Pingback: anabolic steroids capsules

  31. Pingback: Internet Services in Australia

  32. Pingback: Find Businesses in Australia

  33. Pingback: make money with udemy affiliate

  34. Pingback: venus factor

  35. Pingback: wedding photography

  36. Pingback: buy injectable steroids uk

  37. 资源替换方面,也可在src下建立文件夹“xxx”(xxx为渠道名称),在它下面放置要替换的res/values 等,这样打包时,资源就可根据渠道定制不同样式