CN111290780A - 一种自动化上传SDK到maven仓库的方法 - Google Patents

一种自动化上传SDK到maven仓库的方法 Download PDF

Info

Publication number
CN111290780A
CN111290780A CN202010162270.8A CN202010162270A CN111290780A CN 111290780 A CN111290780 A CN 111290780A CN 202010162270 A CN202010162270 A CN 202010162270A CN 111290780 A CN111290780 A CN 111290780A
Authority
CN
China
Prior art keywords
gradle
jar
configuration
task
plug
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN202010162270.8A
Other languages
English (en)
Other versions
CN111290780B (zh
Inventor
谈趣
黄海亮
梁瑛玮
洪行健
李长杰
冷冬
丁一
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Guangzhou Easefun Information Technology Co ltd
Original Assignee
Guangzhou Easefun Information Technology Co ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Guangzhou Easefun Information Technology Co ltd filed Critical Guangzhou Easefun Information Technology Co ltd
Priority to CN202010162270.8A priority Critical patent/CN111290780B/zh
Publication of CN111290780A publication Critical patent/CN111290780A/zh
Application granted granted Critical
Publication of CN111290780B publication Critical patent/CN111290780B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/71Version control; Configuration management

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)

Abstract

一种自动化上传SDK到maven仓库的方法,其特征在于:a.集成www.bintray.com提供的Gradle上传插件到项目中;b.修改Gradle上传插件中的配置1:在上传自定项配置项中,增加使用自己编写的Jar任务;c.修改Gradle上传插件中的配置2:在上传自定项配置项中,增加使用Gradle系统提供的正式环境编译程序生成的混淆后的aar包路径;d.修改Gradle上传插件中的配置3,屏蔽默认的上传文件项配置;Gradle系统提供的正式环境编译程序,会根据我们在程序中的混淆配置,生成混淆后的aar包,两个程序被Jar任务依赖,会在Jar任务之前执行。本发明与已有技术相比,具有通过www.bintray.com提供的Gradle插件上传方式,可以通过一条命令自动化上传包括混淆后的aar包,自定义配置的源码包等打包好的Android SDK到www.bintray.com的优点。

Description

一种自动化上传SDK到maven仓库的方法
技术领域
本发明涉及计算机领域,特别是防录屏技术。
背景技术
www.bintray.com有提供Gradle上传方式可以让用户通过集成Gradle插件(https://github.com/bintray/gradle-bintray-plugin),来自动化上传SDK包到www.bintray.com的maven仓库,但是gradle-bintray-plugin有两个问题。
问题一:无法直接上传混淆后的aar包,要先提前单独生成混淆后的aar包。
问题二:无法直接上传自定义源码包,要先提前单独生成自定义源码包。
源码片段
void uploadArtifact(Artifact artifact) {
def versionPath = packagePath + '/' + versionName : artifact.version
def uploadUri = "/content/$versionPath/${artifact.path}"
if (!artifact.file.exists()) {
logger.error("Skipping upload for missing file '$artifact.file'.")
return
}
artifact.file.withInputStream { is ->
is.metaClass.totalBytes = {
artifact.file.length()
}
logger.warn("Uploading to $apiUrl$uploadUri...")
if (dryRun) {
logger.info("(Dry run) Uploaded to '$apiUrl$uploadUri'.")
return
}
getHttpBuilder().request(PUT) {
if (override) {
uri.query = [override: "1"]
}
addUploadHeaders(headers)
// Set the requestContentType to BINARY, so that HTTPBuildercan encode the uploaded file:
requestContentType = BINARY
// Set the Content-Type to '*/*' to enable Bintray to set iton its own:
headers["Content-Type"] = '*/*'
uri.path = uploadUri
body = is
response.success = { resp ->
logger.warn("Uploaded to '$apiUrl$uri.path'.")
}
response.failure = { resp, reader ->
throw new GradleException("Could not upload to '$apiUrl$uri.path': $resp.statusLine $reader")
}
}
}
}
gradle-bintray-plugin源码中可以看到,传入的参数artifact会打开一个文件的InputStream来上传。
而混淆后的aar包,是需要经过gradle的assembleRelease任务来构建生成的。所以,这里不能直接上传混淆后的aar包,而是要先执行gradle的assembleRelease任务构建混淆后的aar包,再把混淆后的aar包地址作为参数artifact传入。
而自定义源码包,是一个完全自定义的构建任务生成的jar文件。所以,这里不能直接上传自定义源码包,而是要先执行自定义源码包构建任务构建jar文件,再把jar文件的地址作为参数artifact传入。
发明内容
提供一种通过与gradle-bintray-plugin相配合的上传方式,可以一条命令自动化上传包括混淆后的aar包,自定义配置的源码包等打包好的Android SDK到www.bintray.com的maven仓库,的一种自动化上传SDK到maven仓库的方法。
本发明是这样实现的,
1.集成www.bintray.com提供的Gradle上传插件到项目中,
2.修改Gradle上传插件中的配置,在上传自定项配置项中,增加使用自己编写的Jar任务,Jar任务依赖自定义源码包生成程序和Gradle系统提供的正式环境编译程序,执行Jar任务时,会返回到自定义源码包生成程序运行后生成的Jar源码包的路径,
3.修改Gradle上传插件中的配置,在上传自定项配置项中,增加使用Gradle系统提供的正式环境编译程序生成的混淆后的aar包的路径,
4.修改Gradle上传插件中的配置,屏蔽默认的上传文件项配置,
自定义源码包生成程序,自己编写,只会打包需要打包的源码文件,生成Jar源码包,
Gradle系统提供的正式环境编译程序,会根据我们在程序中的混淆配置,生成混淆后的aar包,
自定义源码包生成程序和Gradle系统提供的正式环境编译程序被Jar任务依赖,会在Jar任务之前执行。
本发明由于增加使用自己编写的Jar任务以及对上传自定项配置项中做相应的修改,因此,可以一条命令自动化上传包括混淆后的aar包,自定义配置的源码包等打包好的Android SDK到www.bintray.com的maven仓库,从而能实现本专利申请的发明目的。
具体实施方式:
以下以一个Android Studio Phone项目为例,具体描述如何实现该方案:
(集成gradle-bintray-plugin插件到项目中)
buildscript {
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.0.1'
classpath 'com.github.dcendents:android-maven-gradle-plugin:2.0'//新增
classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.4'//新增
}
}
allprojects {
repositories {
google()
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
(在项目根目录的build.gradle文件中新增两个依赖:
classpath ‘com.github.dcendents:android-maven-gradle-plugin:2.0'
classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.4'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.4是www.bintray.com提供的Gradle上传插件程序。 com.github.dcendents:android-maven-gradle-plugin:2.0是配合gradle-bintray-plugin使用的一个第三方插件程序)
(在需要作为SDK进行上传的module build.gradle中,编写gradle-bintray-plugin使用程序,这里的module名称是core)
apply plugin: 'com.android.library'
android {
compileSdkVersion 29
defaultConfig {
minSdkVersion 15
targetSdkVersion 29
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles 'consumer-rules.pro'
}
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.appcompat:appcompat:1.0.2'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test:runner:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'
}
//-----------------------------------------------------------------------------------------------------------
(以下是gradle-bintray-plugin使用代码和自定义源码包生成程序代码)
apply plugin: 'maven-publish'
apply plugin: 'com.jfrog.bintray'
apply plugin: 'com.github.dcendents.android-maven'
Map<String, String> coreMap = ["/src/main/java/com/easefun/polyv/bintray/upload/core/PolyvMain.java": ""];
task copyCoreSources(type: Copy) {
logger.info "copy core sources"
for (Map.Entry<String, String> entry : coreMap.entrySet()) {
from(project.projectDir.getAbsolutePath() + entry.key) {
into entry.value
}
}
into new File(rootProject.projectDir, "/make/sources/core/com/easefun/polyv/bintray/upload/core")
}
group = 'com.easefun.polyv'
version = '1.0.0'
project.archivesBaseName = 'core'
// This generates sources.jar
tasks.create(name:"coreSourcesJar", type:Jar, dependsOn:["copyCoreSources", "assembleRelease"]) {
manifest {
attributes 'Implementation-Title': "polyv core sources",
'Implementation-Version': '1.0.0'
}
logger.info "make core sources jar"
//从哪里打包class文件
from new File(rootProject.rootDir, "/make/sources/core")
classifier = "sources"
}
publishing {
publications {
MyMavenPublication(MavenPublication) {
groupId = 'com.easefun.polyv'
artifactId = 'core'
version = '1.0.0'
artifact tasks.getByName("coreSourcesJar")
artifact new File(project.getBuildDir(), "/outputs/aar/core-release.aar");
pom.withXml {
def dependenciesNode = asNode().appendNode('dependencies')
// Iterate over the implementation dependencies (we don'twant the test ones), adding a <dependency> node for each
configurations.implementation.allDependencies.each {
// Ensure dependencies such as fileTree are notincluded in the pom.
if (it.name != 'unspecified') {
def dependencyNode = dependenciesNode.appendNode('dependency')
dependencyNode.appendNode('groupId', it.group)
dependencyNode.appendNode('artifactId', it.name)
dependencyNode.appendNode('version', it.version)
}
}
}
}
}
}
// bintray configuration
bintray {
user = 'Bintray user'
key = 'Bintray user key'
publications = ['MyMavenPublication']
pkg {
repo = 'test'
userOrg = 'polyv'
name = 'core'
websiteUrl = 'https://wwww.polyv.net'
vcsUrl = 'https://wwww.polyv.net'
licenses = ["MIT"]
labels = ["polyv", "Polyv", 'core']
publicDownloadNumbers = true
publish = true
version {
name = '1.0.0'
vcsTag = '1.0.0'
gpg {
sign = true
}
}
}
}
说明:
1、在MyMavenPublication中增加artifact字段,artifact字段的值配置为使用自己编写的coreSourcesJar任务,coreSourcesJar任务返回自定义jar源码包路径。
2、coreSourcesJar任务中依赖assembleRelease任务,assembleRelease任务会生成混淆后的aar包。
3、在MyMavenPublication中增加artifact字段,artifact字段的值配置为使用混淆后的aar包路径。
coreSourcesJar任务,是自定义源码包生成程序的入口,内部包含多个自行实现的构建任务,会根据配置的源文件来打包生成Jar源码包。
coreSourcesJar任务的整个流程是:
•coreSourcesJar任务执行之前,会调用copyCoreSources任务,copyCoreSources任务中会把coreMap中配置的源文件拷贝到项目中自定义的/make/sources/core/com/easefun/polyv/bintray/upload/core下。
•coreSourcesJar任务会把/make/sources/core目录下的文件打包成jar文件,并且把jar定义为source。
使用coreSourcesJar任务来生成jar源码包的原因:
用户在使用Android SDK的时候,实际是使用aar包,而aar包中包含的都是编译后的代码文件。编译后的代码文件中不会包含注释,也因为混淆的原因,很多方法中的参数名,都被重命名了,不利于理解。为了给SDK增加易用性,要把可以公开的接口、类、方法,以源码的方式提供,源码文件中可以包含接口注释、类注释、方法注释、变量注释,源码文件都统一打成一个包,就是源码jar包。这样,在查看编译后的文件时,就能直接查看源码文件,可以有效提高SDK的易用性。又因为不是所有代码都能以源码的方式公开,比如加解密相关的逻辑,就不能公开,而是要混淆,所以这里要配置需要打包的源文件,以此来提高SDK的安全性。
assembleRelease任务,是Android Gradle插件库提供的正式环境编译程序,会根据程序中的混淆配置文件,生成混淆后的aar包。
com.android.tools.build:gradle:3.0.1是Android Gradle插件库。
在module build.gradle中配置buildTypes,release表示构建类型,minifyEnabled 为true表示启用混淆,proguardFile表示混淆配置文件。assembleRelease任务会自动根据混淆配置文件中的语法,来混淆aar包中编译后的代码文件。
使用混淆功能的原因:
aar包中包含的编译后的代码文件也是可以阅读的,特别是涉及到加解密部分代码的逻辑,如果其他人可以看到,会产生重大安全隐患,因此,为了提高SDK中代码的安全性,就需要使用混淆功能,使代码难以阅读。也为了减少SDK包体积的大小,也要使用混淆功能。
因此,当执行gradle-bintray-plugin上传任务,在项目根目录下执行命令:
以Mac OS 为例
./gradlew bintrayUpload
gradlew是Android Studio Phone项目的一个shell脚本文件。
在gradle-bintray-plugin上传文件的时候,会先执行makeCoreSourcesJar任务,makeCoreSourcesJar任务又会先执行依赖的copyCoreSources任务和assembleRelease任务,生成自定义jar源码包,混淆后的aar包。然后再上传到配置的maven仓库。以此就实现了一条命令自动化上传包括混淆后的aar包,自定义jar源码包等打包好的Android SDK到www.bintray.com的maven仓库。
优势
可以通过一条命令自动化上传打包好的Android SDK到www.bintray.com的maven仓库,包括:混淆后的aar包,自定义jar源码包。提升SDK发布效率,降低人工操作难度。
混淆后的aar包提升SDK安全性,减少SDK体积大小。
自定义配置的源码包,兼顾提升SDK安全性和SDK使用效率。
使用端不需要做任何改变,对于从maven仓库拉取包,没有任何变化。

Claims (1)

1.一种自动化上传SDK到maven仓库的方法,其特征在于:
a、 集成www.bintray.com提供的Gradle上传插件到项目中,
b、 修改Gradle上传插件中的配置,在上传自定项配置项中,增加使用自己编写的Jar任务,Jar任务依赖自定义源码包生成程序和Gradle系统提供的正式环境编译程序,执行Jar任务时,会返回到自定义源码包生成程序运行后生成的Jar源码包的路径,
c、修改Gradle上传插件中的配置,在上传自定项配置项中,增加使用Gradle系统提供的正式环境编译程序生成的混淆后的aar包的路径,
d、 修改Gradle上传插件中的配置,屏蔽默认的上传文件项配置,
自定义源码包生成程序,自己编写,只会打包需要打包的源码文件,生成Jar源码包,
Gradle系统提供的正式环境编译程序,会根据我们在程序中的混淆配置,生成混淆后的aar包,
自定义源码包生成程序和Gradle系统提供的正式环境编译程序被Jar任务依赖,会在Jar任务之前执行。
CN202010162270.8A 2020-03-10 2020-03-10 一种自动化上传SDK到maven仓库的方法 Active CN111290780B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010162270.8A CN111290780B (zh) 2020-03-10 2020-03-10 一种自动化上传SDK到maven仓库的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010162270.8A CN111290780B (zh) 2020-03-10 2020-03-10 一种自动化上传SDK到maven仓库的方法

Publications (2)

Publication Number Publication Date
CN111290780A true CN111290780A (zh) 2020-06-16
CN111290780B CN111290780B (zh) 2024-04-05

Family

ID=71027028

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010162270.8A Active CN111290780B (zh) 2020-03-10 2020-03-10 一种自动化上传SDK到maven仓库的方法

Country Status (1)

Country Link
CN (1) CN111290780B (zh)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113110872A (zh) * 2021-05-18 2021-07-13 绿漫科技有限公司 一种Android自动化配置构建平台及操作方法
CN113326481A (zh) * 2021-06-02 2021-08-31 北京联创新天科技有限公司 一种项目代码自动构建打包方法、装置、系统及介质
CN113434192A (zh) * 2021-08-26 2021-09-24 广州易方信息科技股份有限公司 基于sdk平台的打包方法、装置以及计算机设备
CN115408042A (zh) * 2022-11-01 2022-11-29 易方信息科技股份有限公司 一种安卓端sdk包多仓库备份方法

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106104467A (zh) * 2014-06-30 2016-11-09 北京新媒传信科技有限公司 一种自动化部署方法和终端
CN106933609A (zh) * 2015-12-29 2017-07-07 北京五八信息技术有限公司 Android应用程序安装包的生成方法及装置
CN109086048A (zh) * 2018-07-05 2018-12-25 杭州涂鸦信息技术有限公司 一种Android客户端项目下多个模块单独发布AAR的实现方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106104467A (zh) * 2014-06-30 2016-11-09 北京新媒传信科技有限公司 一种自动化部署方法和终端
CN106933609A (zh) * 2015-12-29 2017-07-07 北京五八信息技术有限公司 Android应用程序安装包的生成方法及装置
CN109086048A (zh) * 2018-07-05 2018-12-25 杭州涂鸦信息技术有限公司 一种Android客户端项目下多个模块单独发布AAR的实现方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
天才小汪汪: ""Android Gradle配置自动打包aar(sdk)并上传至Maven库"", 《CSDN,HTTPS://BLOG.CSDN.NET/QQ_36009027/ARTICLE/DETAILS/103801761》 *

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113110872A (zh) * 2021-05-18 2021-07-13 绿漫科技有限公司 一种Android自动化配置构建平台及操作方法
CN113326481A (zh) * 2021-06-02 2021-08-31 北京联创新天科技有限公司 一种项目代码自动构建打包方法、装置、系统及介质
CN113326481B (zh) * 2021-06-02 2023-07-14 北京联创新天科技有限公司 一种项目代码自动构建打包方法、装置、系统及介质
CN113434192A (zh) * 2021-08-26 2021-09-24 广州易方信息科技股份有限公司 基于sdk平台的打包方法、装置以及计算机设备
CN113434192B (zh) * 2021-08-26 2021-12-07 广州易方信息科技股份有限公司 基于sdk平台的打包方法、装置以及计算机设备
CN115408042A (zh) * 2022-11-01 2022-11-29 易方信息科技股份有限公司 一种安卓端sdk包多仓库备份方法

Also Published As

Publication number Publication date
CN111290780B (zh) 2024-04-05

Similar Documents

Publication Publication Date Title
CN111290780B (zh) 一种自动化上传SDK到maven仓库的方法
US10185837B2 (en) System and method for encapsulating and enabling protection through diverse variations in software libraries
CN108229112B (zh) 一种保护应用程序、应用程序的运行方法以及装置
CA2724793C (en) System and method for generating white-box implementations of software applications
KR101328012B1 (ko) 애플리케이션 코드 난독화 장치 및 그 방법
CN108279902B (zh) 基于Lua脚本技术的多终端共享底层框架生成、应用方法
CN104111832A (zh) 一种安卓应用程序安装包加壳方法及系统及解壳方法
CN110309630B (zh) 一种Java代码加密方法及装置
KR20180015535A (ko) 안드로이드 어플리케이션 패키지(apk) 내 dex 파일의 부분 암호화를 이용한 안드로이드 어플리케이션의 난독화 방법
Desnos et al. Androguard documentation
KR101863325B1 (ko) 역공학 방지 방법 및 장치
CN112148263B (zh) 前端标准框架及其生成方法、装置、设备及存储介质
Tang et al. On the effectiveness of code-reuse-based android application obfuscation
CN113282294B (zh) 基于安卓平台Java字符串混淆的方法和装置
CN109815651A (zh) 基于中间代码的iOS应用程序处理方法、系统及介质
Ikebuchi et al. Certifying derivation of state machines from coroutines
Dejon et al. Automated security analysis of IoT software updates
Cipresso Software reverse engineering education
CN113326481B (zh) 一种项目代码自动构建打包方法、装置、系统及介质
CN113076146B (zh) 动态apk的加载方法、装置、系统以及介质
Zhang et al. Programming smart contract with solidity
Gadient Automated exploitation of fully randomized executables
Weißer et al. Security Analysis of PHP Bytecode Protection Mechanisms
Krüger et al. CrySL: An Extensible Approach to Validating the Correct Usage of Cryptographic APIs (Artifact)
TWM553450U (zh) 程式碼保護系統

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
CB02 Change of applicant information

Address after: Room 402, No. 66, North Street, University Town Center, Panyu District, Guangzhou City, Guangdong Province, 510006

Applicant after: Yifang Information Technology Co.,Ltd.

Address before: 510000 room 605, science museum, Guangdong University of technology, Panyu District, Guangzhou City, Guangdong Province

Applicant before: GUANGZHOU EASEFUN INFORMATION TECHNOLOGY Co.,Ltd.

CB02 Change of applicant information
GR01 Patent grant
GR01 Patent grant