AS Gradle 使用笔记

Eclipse 移植步骤:
1. Eclipse export gradle file.
2. 修改gradle 目录下gradle-wrapper.properties 内容 distributionUrl=https\://services.gradle.org/distributions/gradle-2.4-all.zip (指向当前gradle 版本)
3. 配置build.gradle 
buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.3.0' (指向当前gradle版本)
    }
}
4. AndroidMainfest.xml 里面元素避免重复。
exp:   1. <application android:allowBackup="true">  
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="com.test.player">




2. 移植过程遇到问题:
1. 依懒关系 project -> libiary project -> libiary project [双重依懒,主项目依懒一个resource libiary项目,其依懒的resource libiary项目又依懒于一个resource libiary project]

--->gradle 配置:
1.settings.gradle:
include ':resources:GCPlayer'
include ':resources:GC_SgsSdk'
include ':project'
2. project.gradle:
apply plugin: 'com.android.application'
dependencies {
    compile fileTree(dir: 'libs', include: '*.jar')
    compile project(':resources:GCPlayer')
}
3. resources gcplayer gradle:
apply plugin: 'com.android.library'
dependencies {
compile fileTree(include: '*.jar', dir: 'libs')
compile project(':resources:GC_SgsSdk')
}
4. resources GC_SgsSdk gradle
apply plugin: 'com.android.library'
dependencies {
compile fileTree(dir: 'libs', include: '*.jar')
}
5. 遇到以下情况:Android Studio - UNEXPECTED TOP-LEVEL EXCEPTION:
请检查是否libs/*jar 有重复,如果确定依赖包没有重复版本不同的,可以尝试删除 \build\intermediates 这个文件夹,重新make一次。

6. Gradle DSL method not found: 'runProguard()'
old:
buildTypes {
release {


runProguard false // 已经被废弃并且停止使用了


......
}
}
new:
buildTypes {
release {


minifyEnabled false // 替代的方式


......
}
}


3. 加入viewpagerindicator 第三方JAR:
1. 主gradle.build 
buildscript {
repositories {
maven { url "http://dl.bintray.com/populov/maven" }
mavenCentral()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:1.5.0'
}
}
allprojects {
repositories {
maven { url "http://dl.bintray.com/populov/maven" }
mavenCentral()
jcenter()
}
}
2. app gradle.build:
repositories {
maven { url "http://dl.bintray.com/populov/maven" }
mavenCentral()


}
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
compile 'com.viewpagerindicator:library:2.4.1@aar'
}



4. 注意要手动加入JNI Lib
 sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            aidl.srcDirs = ['src']
            renderscript.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']

            jniLibs.srcDirs= ['libs'] //this is important for import the JNI SO


        }


5. 注意用引用R资源文件不能用反射机制


6. Settings.gradle 配置不同目录下模块。
例如:
include ':project'
include ':resources:appcompat'
include ':ThirdPartySDK'
project(':ThirdPartySDK').projectDir = new File('D:\\Android_project\\GC_Project\\GC_thirdparty_module2\\src\\main\\ThirdPartySDK')
include ':ThirdPartySDK_AliTVBOX'
project(':ThirdPartySDK_AliTVBOX').projectDir = new File('D:\\Android_project\\GC_Project\\GC_thirdparty_module2\\src\\main\\ThirdPartySDK_TVBOX')


7. 引入多个模块的混淆设置:
注意:请在app project 下的build.gradle 指向的混淆文件:  proguardFiles 'proguard.cfg' //getDefaultProguardFile('proguard-android.txt')  
在proguard.cfg 或者 proguard-android.txt 添加以下第三方混淆文件

#--------------------------ThirdpartyAccountAndPaymentSDK SDK-------------------------
#-include ../resources/thirdparty/ThirdPartySDK/proguard.cfg

-include D:\\Android_project\\GC_Project\\GC_thirdparty_module2\\src\\main\\ThirdPartySDK/proguard.cfg


8. 同时编多个项目不同资源的区分:
例如:assets 下面的资源,在不同APK 会有不一样:
sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            aidl.srcDirs = ['src']
            renderscript.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets','assetsRaw_common]

"aa"{
            jniLibs.srcDirs = [aaSpecLibraray]; //package *.so
        }

        "aa"{
            jniLibs.srcDirs = [aaSpecLibraray]; //package *.so
        }
        "bb"{
            assets.srcDirs = ['assetsRaw_bb']//如果内容同名,将覆盖原来的assets.srDirs
            jniLibs.srcDirs = [bbSpecLibraray]; //package *.so
        }



9. gradle project 依懒第三方aar 包 【不需要从Settings.gradle include 源文件】
1. project.gradle 
1.创建目录依懒
repositories {
flatDir {
dirs 'aars'
}
}
2.编译依懒 aar
dependencies {
// Local binary dependency
compile fileTree(dir: 'libs', include: '*.jar')
compile 'com.android.support:support-v4:21.0.0'
compile(name: 'test-debug', ext: 'aar')
}
3.从源第三方项目中拷贝aar 到本项目aars目录下,记住:必须把混淆文件也拷贝
copy {
from ("testproject/arrs/project/build/outputs/aar"){
include '**/*.aar'
}
from 'testproject/arrs/project/proguard.cfg'
into 'aars'
}
4. 设置混淆
buildTypes {
debug {
signingConfig signingConfigs.release
debuggable true
minifyEnabled true  //enable proguad
zipAlignEnabled true
proguardFiles 'proguard.cfg','aars/proguard.cfg'
}


10.The same input jar is specified twice 完美解决办法
简介: eclipse android proguard 打包时出现 java.io.IOException: The same input jar is specified twice 错误,这里给出解决办法
    升级到高版本的 android sdk 之后发现 proguard 打包app 时出现The same input jar ***.jar is specified twice 的错误,导致混淆失败无法打包出新版本,百度google 都不能解决 愁死了。
    通过一天的折腾人都要崩溃了,最终还是被我找到了解决办法。


解决方法如下:
打开 proguard.cfg
在所有的-libraryjars 前插入 # 成 #-libraryjars xxxx.jar
原因分析,可能是高版本的 sdk 通过 proguard 混淆代码时默认已经将 lib目录中的 jar 都已经添加到打包脚本中,所以不需要再次手动添加。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值