gradle打包android (实现外部导入签名文件、多渠道打包、导入ant脚本)

  最近一直在做Android自动打包,之前已经完成了用纯命令行的形式打包、原生态ant脚本打包,和基于android的SDK的打包,并且实现了多渠道打包,后来同事推荐了gradle,网上的资料说gradle各种好,自己也感兴趣是实现一下,其实一般来说由于android对eclipse的支持减弱,大部分的人都是用gradle与android studio融合,这样面的例子也会比较多,但笔者所在的项目还是在eclipse的比较多,由于开发人员在移植过程中发现报错比较多所以一直没有完全移植(好吧,其实早晚会移植),所以笔者是用eclipse的IDE做的实验,下面先贴几个基础知识

     首先是新建一个android项目,然后用自带的IDE生成gradle文件,具体参考http://blog.csdn.net/x605940745/article/details/41242687,有兴趣的同志们可以采取纯手写的方式,这种方式可以不依赖IDE,所以会比较好

  这个是原始的build.gradle

[html]  view plain  copy
  1. buildscript {  
  2.     repositories {  
  3.         mavenCentral()  
  4.     }  
  5.     dependencies {  
  6.         classpath 'com.android.tools.build:gradle:0.8.+'  
  7.     }  
  8. }  
  9. apply plugin: 'android'  
  10.   
  11. dependencies {  
  12.     compile fileTree(dir: 'libs', include: '*.jar')  
  13. }  
  14.   
  15. android {  
  16.     compileSdkVersion 19  
  17.     buildToolsVersion "19.0.3"  
  18.   
  19.     sourceSets {  
  20.         main {  
  21.             manifest.srcFile 'AndroidManifest.xml'  
  22.             java.srcDirs = ['src']  
  23.             resources.srcDirs = ['src']  
  24.             aidl.srcDirs = ['src']  
  25.             renderscript.srcDirs = ['src']  
  26.             res.srcDirs = ['res']  
  27.             assets.srcDirs = ['assets']  
  28.         }  
  29.   
  30.         // Move the tests to tests/java, tests/res, etc...  
  31.         instrumentTest.setRoot('tests')  
  32.   
  33.         // Move the build types to build-types/<type>  
  34.         // For instance, build-types/debug/java, build-types/debug/AndroidManifest.xml, ...  
  35.         // This moves them out of them default location under src/<type>/... which would  
  36.         // conflict with src/ being used by the main source set.  
  37.         // Adding new build types or product flavors should be accompanied  
  38.         // by a similar customization.  
  39.         debug.setRoot('build-types/debug')  
  40.         release.setRoot('build-types/release')  
  41.     }  
  42. }  

下面我先附上自己的build.gradle

[html]  view plain  copy
  1. buildscript {  
  2.     repositories {  
  3.         mavenCentral()  
  4.     }  
  5.     dependencies {  
  6.         classpath 'com.android.tools.build:gradle:0.12.+'  
  7.     }  
  8. }  
  9. apply plugin: 'android'  
  10.   
  11. ant.importBuild 'build.xml'  //这里导入了ant的脚本  
  12.   
  13. dependencies {  
  14.     compile fileTree(dir: 'libs', include: '*.jar')  
  15. }  
  16.   
  17. android {  
  18.     compileSdkVersion 19  
  19.     buildToolsVersion "20.0.0"  
  20.       
  21.       
  22.      signingConfigs {       //签名,这里的文件名和密码是错的,后面还会有从外部导入的语句  
  23.         myConfig {  
  24.         //绝对路径和相对路径都可以  
  25.             storeFile file("E:\\keystore\\mydemo.keystore")  //签名文件  
  26.             storePassword "276021750"                       //密码  
  27.             keyAlias "mydemo.keystore"                         
  28.             keyPassword "111"  
  29.         }  
  30.      }  
  31.       
  32.       
  33.      buildTypes{  
  34.       release {           //这里就是用来生成apk的步骤,具体看备注  
  35.       //1.添加签名  
  36.       signingConfig  signingConfigs.myConfig  
  37.       //2.runProguard 执行混淆代码  
  38.       runProguard true  
  39.       //混淆规则文件  
  40.        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt'  
  41.       }   
  42.      }  
  43.       
  44.       
  45.       productFlavors {      //这里是多渠道的地方,AndroidManifest.xml文件里面要有标示,下面会贴文件  
  46.         yingyongbao {    
  47.             manifestPlaceholders = [ CHANNEL_NAME:"YINGYONGBAO"]    
  48.         }    
  49.         umeng {    
  50.             manifestPlaceholders = [ CHANNEL_NAME:"UMENG" ]    
  51.         }    
  52.         wandoujia {    
  53.             manifestPlaceholders = [ CHANNEL_NAME:"WANDOUJIA" ]       
  54.         }    
  55.     }    
  56.       
  57.     allprojects {       //在这里是外部导入文件,然后更改本身文件的属性,这里只改了签名,还可以改其他的  
  58.     afterEvaluate { project ->  
  59.         def propsFile = rootProject.file('E:\\keystore\\keystore.properties')  
  60.         def configName = 'myConfig'  
  61.   
  62.         if (propsFile.exists() && android.signingConfigs.hasProperty(configName)) {  
  63.             def props = new Properties()  
  64.             props.load(new FileInputStream(propsFile))  
  65.             android.signingConfigs[configName].storeFile = file(props['storeFile'])  
  66.             android.signingConfigs[configName].storePassword = props['storePassword']  
  67.             android.signingConfigs[configName].keyAlias = props['keyAlias']  
  68.             android.signingConfigs[configName].keyPassword = props['keyPassword']  
  69.         }  
  70.     }  
  71. }  
  72.       
  73.   
  74.       
  75.     sourceSets {  
  76.         main {  
  77.             manifest.srcFile 'AndroidManifest.xml'  
  78.             java.srcDirs = ['src']  
  79.             resources.srcDirs = ['src']  
  80.             aidl.srcDirs = ['src']  
  81.             renderscript.srcDirs = ['src']  
  82.             res.srcDirs = ['res']  
  83.             assets.srcDirs = ['assets']  
  84.         }  
  85.           
  86.           
  87.           
  88.           
  89.   
  90.         // Move the tests to tests/java, tests/res, etc...  
  91.         instrumentTest.setRoot('tests')  
  92.   
  93.         // Move the build types to build-types/<type>  
  94.         // For instance, build-types/debug/java, build-types/debug/AndroidManifest.xml, ...  
  95.         // This moves them out of them default location under src/<type>/... which would  
  96.         // conflict with src/ being used by the main source set.  
  97.         // Adding new build types or product flavors should be accompanied  
  98.         // by a similar customization.  
  99.         debug.setRoot('build-types/debug')  
  100.         release.setRoot('build-types/release')  
  101.     }  
  102. }  
这里的具体功能看备注就可以了,暴力的贴上去就没问题,下面要贴几个文件,一个是AndroidManifest.xml文件,里面就是加了一行

[html]  view plain  copy
  1. <meta-data  
  2.            android:name="UMENG_CHANNEL"  
  3.            android:value="${CHANNEL_NAME}" />  
build.xml添加了一个target,用cmd命令写gradle deploy就可以执行里面的内容了
[html]  view plain  copy
  1. <target name="deploy">     
  2.    <!--  <replaceregexp flags="g" byline="true">     
  3.          <regexp pattern="public static final Host host = Host.Development;" />     
  4.          substitution expression 中是替换的值,替换的值都定义在相对应的配置文件中    
  5.          <substitution expression="public static final Host host = Host.Test;" />    
  6.             fileset 属性中的 dir 用来指定被替换文件所在的目录    
  7.             includes 用来指定要替换哪个文件。     
  8.             <fileset dir="./src/net/xtion/crm/base" includes="CrmAppContext.java" />     
  9.     </replaceregexp> -->   
  10.     <replace encoding="utf-8" dir="./src/com/example/learn723">  
  11.         <include name="MainActivity.java" />  
  12.         <replacefilter token="public static final String host = "Host.Test";" value="public static final String host = "Host.abc";" />  
  13.     </replace>  
  14. </target>    
还有一个签名文件
[html]  view plain  copy
  1. storeFile=E:\\keystore\\mydemo.keystore  
  2. storePassword=276021750  
  3. keyPassword=276021750  
  4. keyAlias=mydemo.keystore  

具体demo可以在这下载

http://download.csdn.net/detail/killer1989/8927225


这样的好处我们可以看到,用ant专职改文件的信息,这里专门做多渠道的打包,可以分开,其实要做到全自动还有两步,一个是从svn自动获取,这个网上有很多的版本可以学习,另一个是用脚本修改build.gradle文件,动态变换签名(其实也可以做批量修改)和动态增加这些功能的代码,可以用shell,可以用Python,各位用需要可以试一下

【6层】一字型框架办公楼(含建筑结构图、计算书) 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
1、资源项目源码均已通过严格测试验证,保证能够正常运行;、 2项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值