Android项目:AS+GitHub+aar+maven(GitHub上的)
时间过得好快,一转眼进公司就这么久了。论语:温故而知新可以为师矣。回顾一下进公司以后学了的东西吧。AS:Git:GitHub:aar:Maven:gradle:混淆机制用AS的gradle–>uploadArchives(上传档案),打包成aar生成Maven,提交到GitHub上项目应用GitHub上的maven混淆机制多渠道打包机制gradle的一些理解https://github.com/rujews/android-tech-docs/blob/master/new-build-system/user-guide/README.md手把手教你无脑接入tinker(实现多渠道)手把手教你写自定义task,一键copy分类各个渠道补丁
用AS的gradle–>uploadArchives(上传档案),打包成aar生成Maven,提交到GitHub上
这个其实很简单
第一步–>PRoject 中的gradle.properties参数配置
#project的根目录-->这里写死吧,因为写根目录的话它指的是module的根目录而不是project的根目录,或许我不会更好的方法aar.path=C:/TongsonCode/GitHub/hello-maven/#版本name&&releaseAPP_VERSION_NAME=1.0.0#groupIdPUBLISH_GROUP_ID = pr.Tongson#artifactIdPUBLISH_ARTIFACT_ID = demo第二步–>需要Android lib的module中的gradle配置
//申请maven插件apply plugin: 'maven'// ext is a gradle closure allowing the declaration of global propertiesext { PUBLISH_GROUP_ID = "${PUBLISH_GROUP_ID}" PUBLISH_ARTIFACT_ID = "${PUBLISH_ARTIFACT_ID}" PUBLISH_VERSION = android.defaultConfig.versionName}//上传文档配置uploadArchives { repositories.mavenDeployer { def deployPath = file(getProperty('aar.path')) repository(url: "file://${deployPath.absolutePath}") pom.project { groupId project.PUBLISH_GROUP_ID artifactId project.PUBLISH_ARTIFACT_ID version project.PUBLISH_VERSION } }}第三步–>uploadArchives生成aar

大功告成,把代码提交到GitHub!
项目应用GitHub上的maven
这个其实更特么简单了!
//依赖中添加dependencies { //compile 'groupId:artifactId:release' compile 'pr.Tongson:demo:1.0.0'}//仓库中添加repositories { jcenter() maven {// https://github.com/gepriniusce/hello-maven// maven的github链接/分支// url "https://raw.githubusercontent.com/gepriniusce/hello-maven/master" url "https://raw.githubusercontent.com/gepriniusce/hello-maven/master" }}大功告成–>分享一下demo咯
https://github.com/gepriniusce/hello-world https://github.com/gepriniusce/hello-maven
代码混淆机制
buildTypes { release { //是否开启小功能 minifyEnabled false //混淆器-->文件 proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } }混淆的常见配置
Keep用来保留java的元素不进行混淆. keep有很多变种,他们一般都是
-keep-keepclassmembers-keepclasseswithmembersdontwarn是一个和keep可以说是形影不离,尤其是处理引入的library时.
-dontwarn哪些不应该混淆
反射中使用的元素
GSON的序列化与反序列化
枚举也不要混淆
四大组件不建议混淆
注解不能混淆
其他不该混淆的
jni调用的java方法java的native方法js调用java的方法第三方库不建议混淆其他和反射相关的一些情况语法
-include {filename} 从给定的文件中读取配置参数 -basedirectory {directoryname} 指定基础目录为以后相对的档案名称 -injars {class_path} 指定要处理的应用程序jar,war,ear和目录 -outjars {class_path} 指定处理完后要输出的jar,war,ear和目录的名称 -libraryjars {classpath} 指定要处理的应用程序jar,war,ear和目录所需要的程序库文件 -dontskipnonpubliclibraryclasses 指定不去忽略非公共的库类。 -dontskipnonpubliclibraryclassmembers 指定不去忽略包可见的库类的成员。保留选项 -keep {Modifier} {class_specification} 保护指定的类文件和类的成员 -keepclassmembers {modifier} {class_specification} 保护指定类的成员,如果此类受到保护他们会保护的更好-keepclasseswithmembers {class_specification} 保护指定的类和类的成员,但条件是所有指定的类和类成员是要存在。 -keepnames {class_specification} 保护指定的类和类的成员的名称(如果他们不会压缩步骤中删除) -keepclassmembernames {class_specification} 保护指定的类的成员的名称(如果他们不会压缩步骤中删除) -keepclasseswithmembernames {class_specification} 保护指定的类和类的成员的名称,如果所有指定的类成员出席(在压缩步骤之后) -printseeds {filename} 列出类和类的成员-keep选项的清单,标准输出到给定的文件 压缩 -dontshrink 不压缩输入的类文件 -printusage {filename} -dontwarn 如果有警告也不终止-whyareyoukeeping {class_specification} 优化 -dontoptimize 不优化输入的类文件 -assumenosideeffects {class_specification} 优化时假设指定的方法,没有任何副作用 -allowaccessmodification 优化时允许访问并修改有修饰符的类和类的成员 混淆 -dontobfuscate 不混淆输入的类文件 -printmapping {filename} -applymapping {filename} 重用映射增加混淆 -obfuscationdictionary {filename} 使用给定文件中的关键字作为要混淆方法的名称 -overloadaggressively 混淆时应用侵入式重载 -useuniqueclassmembernames 确定统一的混淆类的成员名称来增加混淆 -flattenpackagehierarchy {package_name} 重新包装所有重命名的包并放在给定的单一包中 -repackageclass {package_name} 重新包装所有重命名的类文件中放在给定的单一包中 -dontusemixedcaseclassnames 混淆时不会产生形形色色的类名 -keepattributes {attribute_name,...} 保护给定的可选属性,例如LineNumberTable, LocalVariableTable, SourceFile, Deprecated, Synthetic, Signature, and InnerClasses. -renamesourcefileattribute {string} 设置源文件中给定的字符串常量常见错误
1) Proguard returned with error code 1. See console
更新proguard版本android-support-v4 不进行混淆添加缺少相应的库2) 使用gson包解析数据时,出现 missing type parameter 异常
在 proguard-project.txt 中添加-dontobfuscate-dontoptimize在 proguard-project.txt 中添加# removes such information by default, so configure it to keep all of it.-keepattributes Signature# Gson specific classes-keep class sun.misc.Unsafe { *; }#-keep class com.google.gson.stream.* { ; }# application classes that will be serialized/deserialized over Gson-keep class com.google.gson.examples.android.model.* { ; }3) 类型转换错误
在 proguard-project.txt 中添加-keepattributes Signature4) 空指针异常
混淆过滤掉相关类与方法5) java.lang.reflect.UndeclaredThrowableException
-keep interface com.dev.impl.**6) Error: Unable to access jarfile ..libproguard.jar
路径问题7) java.lang.NoSuchMethodError
这也是最常见的问题,因为找不到相关方法,方法被混淆了,混淆过滤掉相关方法便可。缓存刷新机制
gradle配置中
configurations.all { resolutionStrategy.cacheChangingModulesFor 10, 'seconds'}参考: http://www.androidchina.net/6295.html http://android.jobbole.com/84057/