搭建Android项目:AS+GitHub+aar+maven(GitHub上的)

Android 利用GitHub搭建自己的maven库 这是我们的github的目录结构,创建Android项目、module库的方法就不说了,做安卓的必备技能 使用GitHub创建一个仓库并将其与锁对应的仓库关联的方法我也不说了,不会的自己百度 接下来是怎么创建maven仓库: 1、在我们的要提供aar的module的build.gradle最下面写上 apply plugin:'maven' 这是插入maven依赖插件 2... 阅读详情

Android项目:AS+GitHub+aar+maven(GitHub上的)

时间过得好快,一转眼进公司就这么久了。论语:温故而知新可以为师矣。回顾一下进公司以后学了的东西吧。
AS:
Git:
GitHub:
aar:
Maven:
gradle:
混淆机制

这里写图片描述

用AS的gradle–>uploadArchives(上传档案),打包成aar生成Maven,提交到GitHub上

这个其实很简单

第一步–>project 中的gradle.properties参数配置

#project的根目录-->这里写死吧,因为写根目录的话它指的是module的根目录而不是project的根目录,或许我不会更好的方法
aar.path=C:/TongsonCode/GitHub/hello-maven/

#版本name&&release
APP_VERSION_NAME=1.0.0
#groupId
PUBLISH_GROUP_ID = pr.Tongson
#artifactId
PUBLISH_ARTIFACT_ID = demo

第二步–>需要Android lib的module中的gradle配置

//申请maven插件
apply plugin: 'maven'

// ext is a gradle closure allowing the declaration of global properties
ext {
    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
-keepclasseswithmembers

dontwarn是一个和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 Signature

4) 空指针异常

混淆过滤掉相关类与方法

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/

多渠道打包机制

在module中的build.gradle中android {里}

// If you need to add more flavors, consider using flavor dimensions.
    productFlavors {
        mock {
            applicationIdSuffix = ".mock"
        }
        prod {

        }
    }

在module中的src文件夹里面创建目录:
根据加上对应name的文件夹,然后在里面做修改就好了
其实这里
mock ==main
prod ==main

然后渠道文件夹里的内容把main里的内容覆盖而已。

而打包机制这个就要对gradle Task的理解了。

Android SDK上传到github+maven管理,可以android studio直接maven下载使用 一、将so库和jar文件打包成aar文件形式: 1.在一个空的android工程中,新建一个module,选择Android Library,命名为YoumeTalksdk_Maven ; 2.把要打包的so库和jar文件放到module的libs目录下 3.在新的module的build.gradle中添加sourceSets : android { ... sourceSets { main { jniLibs.srcDirs = ['libs'] } } } 注意:在mod 阅读详情

相关推荐

Android - 利用 jitpack 免费发布闭源 aar

的代码和资源,其依赖的第三方库不会被合并进去,想要被其他工程正常集成使用,就需要将第三方库的依赖信息传递下去,所以,需要借助 maven 发布插件,生成。的,在提交库信息时,就会要求填写开源仓库的 url,如果我们不想开源源代码,仅仅只是希望把混淆后的。配置项,如需混淆,则需要依赖其他 Gradle 插件,有需要的可以看我之前写的另一篇文章。)根据你的库来修改,不能照抄的!构建会很快,1 分钟左右就出来了,但是这次日志图标是红色的,后面是。任务,即可在指定的本地目录下,生成 maven 相关的文件,其中。

GitLqr的博客 1781

【Maven学习】如何上传jar或aar包至Maven私服,让Android项目可以支持Maven库在线依赖的方式来使用jar包

一、本地依赖方式 由于要使用第三方jar包。而第三方给的SDK是jar包,并没有上传到Maven库,因此不支持Maven库在线依赖,所以需要如下所示的,在项目中手动集成jar包。 然后在build.gradle中 导入刚才的libs目录 dependencies { api fileTree(include: ['*.jar'], dir: 'libs') } 这种方式本人不喜欢,因...

字节卷动 4013

AndroidStudio 打aar、jar包,并发布到github详细步骤

今天需要远程依赖新增的组件包,正好简单总结一下,希望对有需要的哥们以帮助! 步骤: 1、新建一个目录作为jar或aar包以及发布文件生成输出目录(eg:components_publisher) 2、主工程文件“gradle.properties”中添加“aar.deployPath=$path”属性, $path是步骤1中新建目录的绝对路径 3、组件工程build.gradle中

fushiming的博客 2013

Github如何通过Packages进行Apache Maven registry发布及引用

本文主题 主要介绍如何通过github的Packages进行发布和引用maven依赖包 个人拙见 这个功能当前好像比较鸡肋,无特殊场景需要,建议直接弃坑 (由于个人认知有限,可能会造成误导,所以仅做参考;欢迎各位大佬的指导) 原因: 1. 每个要引用或发布的服务都需要单独配置repository和server等信息 2. 引用的服务也需要配置server(账号)信息 如何发布依赖 1.在pom中加入配置 <distributionManagement>

if_you_can_please_do的博客 1168

Java电商秒杀系统性能优化(一)——电商秒杀系统框架回顾

电商秒杀系统框架回顾项目简介外部依赖框架回顾项目要点项目中存在的问题小结 课程是免费的,课程地址如下:SpringBoot搭建电商秒杀项目,课程真的很棒,作者的思路很清晰,建议各位读者可以跟着视频练习一下这个项目; 项目简介 通过SpringBoot快速搭建的前后端分离的电商基础秒杀项目。项目通过应用领域驱动型的分层模型设计方式去完成:用户otp注册、登陆、查看、商品列表、进入商品详情以及倒计时秒...

ghw15221836342的博客 3722

别再乱调NvM_WriteBlock了!手把手教你搞懂Autosar NVM状态机与读写时序

本文深入解析Autosar NVM状态机与读写时序,帮助开发者避免常见错误。通过详细的状态机解读、最佳实践代码示例和异常处理策略,提升嵌入式系统中数据存储的可靠性。特别针对NvM_WriteBlock的调用逻辑和状态机机制进行实战讲解,解决工程师在实际开发中遇到的异步写入问题。

weixin_33701617的博客 345

GitLab CI/CD实现代码推送后自动maven打包发布

因为目前工作中有用到这种推送自动打包发布的模式,所以顺便就学习了。当然目前对于gitlab-ci/cd也只是了解会用的阶段,因为不太了解docker,那些dcoker的自动发布构建镜像脚本不太会写,所以这次我没有用docker,等我系统学习了docker以后再说。

weixin_42032770的博客 9392

ESP-01S使用micropython,利用Thonny烧写固件

在家舒服的太久了,想学习点新的东西,这次看上了ESP8266系列的联网设备,想自己做点小玩意出来耍耍,下面跟我一起来学习吧。本篇主要记录固件的烧写及测试。Thonny下载链接不算难,但是网上资源较少。也是提醒自己不要忘记这个步骤,记录一下,也分享给和我一样开始接触的小伙伴,加油加油,万事开头难。

weixin_43422072的博客 1693

使用gitlab搭建maven仓库

1、开发过程中,随着项目的发展,经常会有一些基础库需要打成aar或者jar的形式,分发到各个业务线去使用,往往每一次变更都需要各业务线手动替换aar或者jar包,成本很高。 2、使用公司已有的gitlab搭建maven仓库,将相应的aar和jar包托管到maven仓库,各个业务线只需要通过implementation 引用方式即可使用,无需替换aar和jar包 3、基础库发生变更后,只需要通过各个业务线修改依赖版本即可

VipPetergee的博客 7102

DDR4技术原理详解

DDR4是DDR4-SDRAM的简写,即第4代DDR-SDRAM,DDR-SDRAM全称Double Date Rate Synchronous Dynamic Random Access Memory。本文重点解析DDR4技术规范及其背后的电子电路原理,以及编程使用DDR4过程中需要注意的性能事项。

ctbinzi的专栏 1万+

看完让你的RSA提升一个台阶 [GKCTF 2021]RRRRsa

我是,今天我给大家分享一个关于RSA的题目,带大家领略的魅力。今天开始前,我们先学习一下。

m0_62102520的博客 853

android aar上传gitlab

android grovy maven aar上传gitlab

正在Android的学习路上 1452

更新|芒果YOLOv8改进182:注意力机制MLLA:即插即用|融合 Mamba 设计精髓的线性注意力视觉Transformer

芒果YOLOv8改进:即插即用,最新注意力机制MLLA:融合 Mamba 设计精髓的线性注意力视觉Transformer

包括YOLOv5、YOLOv7、YOLOv8等模型改进 867

Knowledge Catalog OKF Bundle 实战:Stack Overflow Posts ↔ Votes 关联路径深度解析

`posts ↔ votes` 是 Stack Overflow 数据模型中最核心的关联路径之一,它通过 `votes.post_id = posts.id` 将每一次投票、标记(flag)与收藏动作挂接到具体的帖子之上。本文以本仓库 knowledge-catalog 中 OKF bundle 的 [posts__votes 关联参考文档](https://link.gitcode.com/i/

gitblog_01045的博客 1066

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Android 发布 aar 到 maven 仓库(maven 和 maven-publish 插件的区别)

Android 如何发布 aar 到 maven 仓库以及 maven 和 maven-publish 插件的区别。

川峰的博客 4551

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

android github aar,发布AAR到Github上

第一步:创建github项目将项目Clone到本地,记录本地路径如:/Users/xxxx/Documents/Workspace/Java/xxxxx第二部:将如下代码复制到libaray项目中在Library项目的build.gradle中增加如下代码:apply from: 'maven_build.gradle'//对maven_build.gradle进行依赖文件名:maven_buil...

weixin_35494876的博客 744

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Android打aar包问题总结

该插件提供了将library以及它依赖的library一起打包成一个完整aar的解决方案,支持AGP 3.0及以上。(目前测试的版本范围是AGP 3.0 - 7.1.0,Gradle 4.9 - 7.3)方法一:将moduleB的资源,手动拷贝一份到moduleA中;

唐诺 1529

Android SDK开发实战:如何用fat-aar解决嵌套依赖的aar打包难题

本文深入探讨了Android SDK开发中嵌套依赖aar打包的难题,并提供了使用fat-aar插件的终极解决方案。通过详细的Gradle配置指南和实战案例,帮助开发者解决依赖丢失、资源冲突等常见问题,确保SDK在各种环境中稳定运行。文章还涵盖了发布到Maven仓库的完整流程和疑难问题排查技巧,是Android SDK开发的必备指南。

m3n5b7v8c9x的博客 770

Android SDK开发之生成AAR包、JAR包并生成本地&远程Maven仓库

前言:公司开发离不开模块化和团队合作,我们经常会用到其他小伙伴开发好的Sdk,如果我们也想开发Sdk供别人使用,这就涉及到sdk的打包等过程。今天就抽空跟大家分享一下我在sdk打包过程中遇到的坑! 开发打包工具:AndroidStudio 仓库:Github 言归正传,我就直接进入Sdk的打包过程讲解(前提是在lib module的基础上,创建方式就不赘述了) 一.在Lib的gradle文件中加入...

白哥哥的博客 2022

Android SDK开发之aar从0到1 踩坑史

记录一下开发aar所填的坑。 前期:      ①使用Android Studio新建一个项目      ②File--New--New Module创建一个module(在此module里开发你的aar逻辑) 1.如果生成的aar里没有依赖的第三方的库则可以使用这种方式:      在书写完代码后,执行Build--Rebuild project    待重置完后在module里  b...

圣西罗的红与黑 1167

Filament AAR打包全攻略:从源码到Android Studio集成的完整工作流

本文详细介绍了如何从Filament源码编译到AAR打包,再到Android Studio集成的完整工作流。涵盖环境搭建、跨平台编译配置、AAR打包优化及Android项目集成实践,帮助开发者高效实现高质量3D渲染效果。

chenqiaodezhi57164的博客 567

Android开发中aar嵌套本地依赖的完整打包方案与实战指南

在Android模块化开发中,aar(Android Archive)作为库的标准分发格式,其依赖管理机制直接影响工程的构建效率和可维护性。Gradle默认的依赖配置对于本地aar文件缺乏传递性打包支持,导致模块在分发时出现依赖链断裂,引发ClassNotFoundException等运行时问题。为解决这一技术痛点,开发者需要理解aar打包原理,掌握将次级依赖物理合并到主aar中的方法。通过引入fat-aar插件,可以干预Gradle构建生命周期,实现class、资源、清单文件的智能合并,从而生成自包含的独

weixin_33957648的博客 606

Android本地Maven库创建及使用

在某些情况下,公司的多个项目都会有一些共通的核心库。一旦修改起来,多个项目来回修改很麻烦,也很容易乱。所以可以将相关的核心库提取出来做成一个library,创建一个本地maven库。多个项目引用起来就方便多了。维护起来也简单。 创建一个核心库的工程 创建一个新的Android工程,直接选择任意模板,或者Empty都可以 点击File -> New -> Moudule ->Android Library, 点击Next,然后需要配置包名等信息,点击Finish完成即可 然后就

自由空间 3761

Unity Android打包:Manifest合并机制与AAR集成避坑指南

AndroidManifest.xml是Android应用的配置核心,定义了应用组件、权限等关键信息。其工作原理在于构建时通过Gradle的Manifest Merger工具,将主应用与所有依赖库的清单文件合并为单一文件。这一机制确保了模块化开发中配置的统一性,其技术价值在于支撑复杂的应用架构与第三方SDK集成。在Unity开发中,当需要集成包含Manifest的第三方AAR库(如广告、支付SDK)时,开发者常会遇到**Manifest合并冲突**与**编译失败**问题。理解合并优先级规则,并掌握使用`to

weixin_30797199的博客 689
上一篇: Android中Cursor类的概念和用法
下一篇: 一步一步走向自定义控件
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值