gradle简单使用

作者: 42c79b70934f | 来源:发表于2016-05-26 13:30 被阅读299次

在公司只能用eclipse来进行Android的开发,可领导突然想用gradle实现自动化打包,之前的概念全是AS使用gradle,于是开始研究起gradle,并就对gradle有了全新的认识。

根据不同版本设置不同常量

语法:

buildConfigField "boolean", "API_ENV", "true"

支持String、boolean
例子:有两个版本 debugrelease,必须得有debug,感觉是这样
比如正式版和开发版服务器的地址是不同的,这时可以在gradle当中配置

android {
    buildTypes {
        debug {
            buildConfigField "String", "API_URL",
               "\"http://test.example.com/api\""
               buildConfigField "boolean", "LOG_HTTP_CALLS", "true"
     }
       release {
            buildConfigField "String", "API_URL",
                "\"http://example.com/api\""
               buildConfigField "boolean", "LOG_HTTP_CALLS","false"
     } 
 }

代码获取

String apiUrl = BuildConfig.API_URL;

注意:上述的方法只能在android studio使用,如果要在eclipse中想动态控制变量,可以用以下方法。

1、动态更改xml中的<meta-data>

在AndroidManifest中,它是已这种格式存在

<meta-data
    android:name="name"
    android:value="value" />

在代码中获取是这么获取

    //在Activity应用<meta-data>元素。
    ActivityInfo info = this.getPackageManager()
            .getActivityInfo(getComponentName(),PackageManager.GET_META_DATA);
    info.metaData.getString("meta_name");

    //在application应用<meta-data>元素。
    ApplicationInfo appInfo = this.getPackageManager()
            .getApplicationInfo(getPackageName(),PackageManager.GET_META_DATA);
    appInfo.metaData.getString("meta_name");

    //在service应用<meta-data>元素。
    ComponentName cn = new ComponentName(this, MetaDataService.class);
    ServiceInfo info = this.getPackageManager().getServiceInfo(cn, PackageManager.GET_META_DATA);
    info.metaData.getString("meta_name");

    //在receiver应用<meta-data>元素。
    ComponentName cn = new ComponentName(context, MetaDataReceiver.class);
    ActivityInfo info = context.getPackageManager().getReceiverInfo(cn, PackageManager.GET_META_DATA);
    info.metaData.getString("meta_name");

而使用gradle方法修改可参考之后的内容动态更改包名以及渠道变量

2、动态更改 resValue

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

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

另外一种方法是直接建立一个文件
来源于:http://tech.meituan.com/mt-apk-adaptation.html

android {
    productFlavors {
        wandoujia { 
        }
    }
}

上面的配置会默认src/wandoujia目录为wandoujia flavor的dataSet。
接下来,在src目录内创建wandoujia目录,并添加如下应用名字符串资源(src/wandoujia/res/values/strings.xml):

<resources>
    <string name="app_name">美团团购</string>
</resources>

同时也能更改图片文件
更改方式和上述string一样

动态更改包名以及渠道变量

生成的渠道包会产生在apk文件下

更改了包名 并生成了 playstore以及hiapk两个渠道的包

productFlavors {
    playstore {
            packageName='com.youxiachai.androidgradle.playstore'
    }
    hiapk {
            packageName='com.youxiachai.androidgradle.amazonappstore'
    }
}

这是生成了wandoujia的渠道包,并且将xml中的渠道变量更改成了wandoujia

productFlavors {
        wandoujia{
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "wandoujia"]
        }
    }

而这个变量在xml中是这个形式

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

如果渠道名有很多总共打的包的数量会是 渠道*4
如果想要单独打一个渠道的包
首先

gradle tasks

就可以看到一下内容

Build tasks
-----------
assemble - Assembles all variants of all applications and secondary packages.
assembleAndroidTest - Assembles all the Test applications.
assembleDebug - Assembles all Debug builds.
assembleRelease - Assembles all Release builds.
assembleWandoujia - Assembles all Wandoujia builds.

比方说我只想打wandoujia的渠道包
就执行

gradle assembleWandoujia

这样就会打包豌豆荚的4个包。

以下是我之前编译时遇到的错误及解决方法

  • .9图变形的问题可以通过重新制作点9图,或者将.9图改成普通的.png图片
  • 还遇到过values文件夹得问题,里面的attrs可能重复项也会导致gradle编译不成功
  • values文件夹中的color文件的格式错误,比如name多加了一个空格
  • \ttf这种问题。主要是该文件不是utf-8中的无rom要改成这种格式

参考资料

相关文章

网友评论

    本文标题:gradle简单使用

    本文链接:https://www.haomeiwen.com/subject/evcxdttx.html