CN111290780A - 一种自动化上传SDK到maven仓库的方法 - Google Patents
一种自动化上传SDK到maven仓库的方法 Download PDFInfo
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 12
- 230000010354 integration Effects 0.000 claims abstract description 3
- 230000000873 masking effect Effects 0.000 claims description 2
- 238000012856 packing Methods 0.000 claims description 2
- 238000010276 construction Methods 0.000 description 4
- 239000011230 binding agent Substances 0.000 description 2
- 230000004044 response Effects 0.000 description 2
- 241000408495 Iton Species 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 235000015114 espresso Nutrition 0.000 description 1
- 239000012634 fragment Substances 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000002265 prevention Effects 0.000 description 1
- 239000011800 void material Substances 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/71—Version 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
技术领域
本发明涉及计算机领域,特别是防录屏技术。
背景技术
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任务之前执行。
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)
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)
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的实现方法 |
-
2020
- 2020-03-10 CN CN202010162270.8A patent/CN111290780B/zh active Active
Patent Citations (3)
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)
Title |
---|
天才小汪汪: ""Android Gradle配置自动打包aar(sdk)并上传至Maven库"", 《CSDN,HTTPS://BLOG.CSDN.NET/QQ_36009027/ARTICLE/DETAILS/103801761》 * |
Cited By (6)
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 |