当前位置:首页 » 安卓系统 » androidgradlejar

androidgradlejar

发布时间: 2023-02-09 04:51:38

A. android gradle 怎么用

Groovy 的基本语法
方法调用
apply plugin: 'com.android.application'

以上语句中的apply是一个方法,给它传递了一个参数plugin,plugin 的值是'com.android.application'。
如果有多个参数,则以逗号隔开,例如
compile name: 'volley', ext: 'aar'

闭包
Groovy中花括号包含的部分成为一个闭包(Closure)。例如下面的代码
compileOptions {
sourceCompatibility javaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
}

compileOptions 是一个 Method, 它的参数是一个闭包,这个闭包内依次执行了两个方法 --sourceCompatibility 和targetCompatibility, 参数都是JavaVersion.VERSION17。
闭包也可以嵌套包含
repositories {
flatDir {
dirs 'libs'
}
}

常见使用方法
包依赖(aar)

使用aar时可以分为两种情况
① aar位于本地目录
首先在 android 的参数闭包中添加调用方法 repositories
repositories {
flatDir {
dirs 'libs'
}
}

然后在 dependencies 的参数闭包中添加
compile name: 'volley', ext: 'aar'

② aar位于远程仓库
这里以maven为例,当然也可以使用其他类型的仓库,例如 Ivy。
只需要在jar包引用方式后面添加一个@aar就可以了
compile 'com.alibaba:fastjson:latest.integration@aar'

B. 如何使用Android Studio打包混淆的Jar

使用AS打包混淆Jar包,网络一下,一片一片的,但是很多都是零零散散的写得不是很详细或是直接拷贝,按照他们的教程测试总不是很顺利,所以这里我就把我个人学习AS打包混淆Jar的成果总结出来,希望对大家有帮助。个人觉得写得还是比较详细的

使用gradle混淆打包Jar

使用AS开发项目,引入第三方库是非常方便的,我们只需要在build.gradle中配置一行代码就可以轻松引入我们需要的开发库。那么gradle可以帮我们混淆打包Jar吗?答案是当然可以!

那么我们如何打包Jar呢?其实我们在编译项目的时候,AS已经帮我们在目录build/intermediates/bundles/release/classes.jar打好了Jar。那么我们需要做的就是把Jar进行混淆的工作了。这里以个人项目bannerDemo为例,混淆步骤如下:

在你的library的build.gradle文件中加入如下代码:

task makeJar(type: proguard.gradle.ProGuardTask, dependsOn: "build") {
// 未混淆的jar路径
injars 'build/intermediates/bundles/release/classes.jar'
// 混淆后的jar输出路径
outjars 'build/outputs/cocolove2-banner-1.1.0.jar'
// 混淆协议
configuration 'proguard-rules.pro'}

配置混淆协议

1.我们先把AS自带的协议配置进来中文注释,笔者添加

# This is a configuration file for ProGuard.# http://proguard.sourceforge.net/index.html#manual/usage.html## Starting with version 2.2 of the Android plugin for Gradle, these files are no longer used. Newer# versions are distributed with the plugin and unpacked at build time. Files in this directory are# no longer maintained.#表示混淆时不使用大小写混合类名-dontusemixedcaseclassnames#表示不跳过library中的非public的类-#打印混淆的详细信息-verbose# Optimization is turned off by default. Dex does not like code run# through the ProGuard optimize and preverify steps (and performs some# of these optimizations on its own).-dontoptimize##表示不进行校验,这个校验作用 在java平台上的-dontpreverify# Note that if you want to enable optimization, you cannot just# include optimization flags in your own project configuration file;# instead you will need to point to the# "proguard-android-optimize.txt" file instead of this one from your# project.properties file.-keepattributes *Annotation*
-keep public class com.google.vending.licensing.ILicensingService-keep public class com.android.vending.licensing.ILicensingService# For native methods, see http://proguard.sourceforge.net/manual/examples.html#native-keepclasseswithmembernames class * {
native <methods>;
}# keep setters in Views so that animations can still work.# see http://proguard.sourceforge.net/manual/examples.html#beans-keepclassmembers public class * extends android.view.View {
void set*(***);
*** get*();
}# We want to keep methods in Activity that could be used in the XML attribute onClick-keepclassmembers class * extends android.app.Activity {
public void *(android.view.View);
}# For enumeration classes, see http://proguard.sourceforge.net/manual/examples.html#enumerations-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}

-keepclassmembers class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator CREATOR;
}

-keepclassmembers class **.R$* {
public static <fields>;
}# The support library contains references to newer platform versions.# Don't warn about those in case this app is linking against an older# platform version. We know about them, and they are safe.-dontwarn android.support.**# Understand the @Keep support annotation.-keep class android.support.annotation.Keep-keep @android.support.annotation.Keep class * {*;}-keepclasseswithmembers class * {
@android.support.annotation.Keep <methods>;
}

-keepclasseswithmembers class * {
@android.support.annotation.Keep <fields>;
}

-keepclasseswithmembers class * {
@android.support.annotation.Keep <init>(...);
}

2.AS自带的配置文档还是不够的,我们还需要加入如下配置
这里只展示基本操作,在实际开发中可能需要更多依赖,要根据具体情况引入自己需要的依赖包

#下面代码中的xx是指我个人的配置路径,涉及个人信息,这里以xx代替
#引入依赖包rt.jar(jdk路径)
-libraryjars /xxx/xx/xx/jdk1.8.0_77.jdk/Contents/Home/jre/lib/rt.jar
#引入依赖包android.jar(android SDK路径)
-libraryjars /xx/xx/xx/Android/sdk/platforms/android-24/android.jar
#如果用到Appcompat包,需要引入
-libraryjars /xxx/xxx/xx/xxx/MyApplication/library-banner/build/intermediates/exploded-aar/com.android.support/appcompat-v7/24.1.1/jars/classes.jar
-libraryjars /xx/xx/xx/xx/MyApplication/library-banner/build/intermediates/exploded-aar/com.android.support/support-v4/24.1.1/jars/classes.jar

#忽略警告
-ignorewarnings
#保证是独立的jar,没有任何项目引用,如果不写就会认为我们所有的代码是无用的,从而把所有的代码压缩掉,导出一个空的jar
-dontshrink
#保护泛型
-keepattributes Signature

3.加入自己不想混淆的配置根据实际需求配置

-keep class com.cocolove2.library_banner.view.**{*;}

在命令行执行命令混淆Jar,提示BUILD SUCCESFUL表示成功!

//mac./gradlew makeJar//windowsgradlew makeJar

示例展示

  • 我这里以混淆library-banner库为例

  • 1.首先我们要看看下我们的buildTool的配置,如下图:


    [email protected]

    混淆报错解决办法个人遇到的

  • #log提示缺少依赖Jar,或者路径不对


  • 解决办法:乖乖的引入缺少的依赖jar和修改路径

  • #提示如下异常[INFO] java.io.IOException: Can't read [D:Program

  • FilesJavajdk1.8.0_91jrelib t.jar] (Can't process class [com/oracle/net/Sdp$1.class] (Unsupported class version number

  • [52.0] (maximum 51.0, Java 1.7)))


  • 解决办法:

  • 下载最新proguard(支持Java 8的版本),然后将下载的文件解压

  • 将andorid sdk/tools/proguard/lib中的jar包,替换为刚下载解压文件中的lib包。

  • proguard5.2.1下载地址

  • 阅读

C. Android Studio中gradle命令指定打jar包...

近期在项目中需要对网络访问接口进行jar封装。

在eclipse中进行指定类进行打jar包很简单,但是在android studio中则有点困难,其主要的原因是需要掌握gradle命令形式。接下来就直接上干货。

首先,在你需要进行分装jar的模块进行build.gradle文件下进行以下添加:

然后在Windos CMD中跳转到你的项目路径下,然后执行gradle makeJar命令,如果提示:gradle命令不可用。那么你需要在你的系统环境变量中进行变量的添加:

找到你的gradle插件路径进行添加,然后再在path属性的末尾进行

“;%GRADLE_HOME%\bin”添加。

然后输入 "gradle -v"或者"gradle -version"都可以.

如图就说明gradle配置成功了。

然后再cmd命令到你的项目路径下,然后再次输入gradle makeJar回车,

这里提示我们在我需要进行jar分装的模块出错了, 我们按照错误提示进行修改 ,在buold.gradle文件中添加

lintOptions {

   abortOnErrorfalse

}

然后点击Sync Now。再次运行gradle makeJar。然后再一长串的编译后在末尾看到

然后我们在项目模块的build/libs文件夹下看到了我们命名的.jar文件

OK,到此就结束了。上面是个简单的例子,只能打包某个包下面的所有文件,如果要实现只打某个包下面的某些子包或者文件可参考如下示例:

taskmakeSdkJar(type:org.gradle.api.tasks.bundling.Jar){

baseName'pluginsdk'

//只打包org.cmdmac下的org.cmdmac.pluginsdk.impl和org.cmdmac.gamecenter,其他子包不会被打包进去

from('build/intermediates/classes/debug/org/cmdmac/'){

include'pluginsdk/impl'

include'gamecenter'

}

into('org/cmdmac/')

//    exclude('R.class')

//    exclude{ it.name.startsWith('R$');}

taskmakeSdkJar(type:org.gradle.api.tasks.bundling.Jar){

baseName'pluginsdk'

//只打包org.cmdmac下的org.cmdmac.pluginsdk.impl和org.cmdmac.gamecenter,其他子包不会被打包进去

from('build/intermediates/classes/debug/org/cmdmac/'){

include'pluginsdk/impl'

include'gamecenter'

}

into('org/cmdmac/')

//    exclude('R.class')

//    exclude{ it.name.startsWith('R$');}

}

D. android gradle 怎么编译framework.jar

1,首先将framework.jar拷贝到项目的/libs文件夹中,然后右键framework.jar文件,然后Add as Library ,再选当前的mole

完了之后,在你的Mole的build.gradle中会增加了

这个时候我们已经添加了framework.jar包,但是我们还有改变framework.jar的作用域属性,右键你的mole,Open Mole Setting,然后将framework.jar的Scope改为 Provided

E. Android第三方类库中的jar包不被混淆

假如你的项目中有这样一个image类库, 打开image类库下的build.gradle文件,查看里面有哪些 引用包 ,如果lib里面也有包, lib中的也需要查看

假如现在,让 最后一个" compile'com.blankj:utilcode:1.9.8 '" 不被混淆

打开图中的 External Libraries 文件, 我们导入的所有的第三方jar包都在里面
找到" compile'com.blankj:utilcode:1.9.8 '"

查看包名,在混淆文件中添加

所有的jar包都依次写上 -keep class "jar包名" ,就ok了
--注意事项--
1.保证实体类不被混淆
2.保证第三方的jar包不被混淆,类似于,友盟,地图,等等,配置的时候,就把混淆文件也过来,免得再回去找
3.添加基础混淆配置,网上有很多的实例

################ 以下直接到 proguard-rules.pro文件中,实体类,第三方部分,需修改####################

F. android studio怎样配置gradle本地路径

build.gradle

//设置脚本的运行环境
buildscript {
//支持java 依赖库管理(maven/ivy),用于项目的依赖。
repositories {
mavenCentral()
}
//依赖包的定义。支持maven/ivy,远程,本地库,也支持单文件
dependencies {
classpath 'com.android.tools.build:gradle:0.4'
}
}
//声明构建的项目类型,这里当然是android了
apply plugin: 'android'
//设置编译android项目的参数
android {
compileSdkVersion 17
buildToolsVersion "17"

defaultConfig {
minSdkVersion 8
targetSdkVersion 17
}
//Android默认配置
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src']
resources.srcDirs = ['src']
aidl.srcDirs = ['src']
renderscript.srcDirs = ['src']
res.srcDirs = ['res']
assets.srcDirs = ['assets']
}
//测试所在的路径,这里假设是tests文件夹,没有可以不写这一行
instrumentTest.setRoot('tests')
}

//这个是解决lint报错的代码
lintOptions {
abortOnError false
}
/**
* 签名设置
*/
signingConfigs {
myConfigs {
storeFile file("签名文件地址")
keyAlias "..."
keyPassword "..."
storePassword "..."
}
}
/**
* 混淆设置
*/
buildTypes {
release {
signingConfig signingConfigs.myConfigs
runProguard true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
/**
* 渠道打包(不同包名)
*/
proctFlavors {
qqqq {
applicationId = '包名'
}
hhhhh {
applicationId='包名'
}
}
}
/**
* .so文件的导入
*/
task NativeLibs(type: Copy) {
from fileTree(dir: 'libs', include: 'armeabi/*.so') into 'build/lib'
}

tasks.withType(Compile) {
options.encoding = "UTF-8"
}

tasks.withType(Compile) {
compileTask -> compileTask.dependsOn NativeLibs
}
clean.dependsOn 'cleanCopyNativeLibs'
tasks.withType(com.android.build.gradle.tasks.PackageApplication) { pkgTask ->
pkgTask.jniFolders = [new File(buildDir, 'lib')]
}
//依赖库
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
}
gradle 作为构建工具,能够很方便的使用本地jar包,以下为使用的代码块。
ependencies {
//单文件依赖
compile files('libs/android-support-v4.jar')
//某个文件夹下面全部依赖
compile fileTree(dir: 'libs', include: '*.jar')
}

android {

}
gradle 同时支持maven,ivy,由于ivy我没用过,所以用maven 作为例子,以下为代码块:
repositories {
//从中央库里面获取依赖
mavenCentral()
//或者使用指定的本地maven 库
maven{
url "file://F:/githubrepo/releases"
}
//或者使用指定的远程maven库
maven{
url "远程库地址"
}
}

dependencies {
//应用格式: packageName:artifactId:version
compile 'com.google.android:support-v4:r13'}

android {

}
对于项目依赖 android library的话,就不是依赖一个jar,那么简单了,在这里需要使用gradle mulit project 机制。在过去,android library并没有一个很好的包管理方式,简单来说,在gradle出现以前,官方并没有一种用于管理android library 依赖包的方式,一般我们都是直接下载别人的android library project 源码进行集成,而对于第三方的android-maven-plugin 用的是apklib 格式。
而现在,官方终于推出一种android library的打包格式,扩展名为*.aar。前面提到,目前android gradle插件并不支持本地直接使用*.aar文件,不过,支持包管理库的引用方式,下面,我为大家说一下,怎么对android library 发布使用。
打包android library
对android library 进行打包直接在library项目下面使用gradle build 即可,然后,你就会在 build/libs 目录下看到两个*.aar文件,一个debug包用的,一个是release 下用的,看个人需求使用,这里我们用的是release 版本的 .aar 文件。

热点内容
shell输入脚本 发布:2024-05-06 10:19:49 浏览:984
通达信自定义板块在哪个文件夹 发布:2024-05-06 09:56:37 浏览:103
在linux搭建mqtt服务器搭建 发布:2024-05-06 09:52:00 浏览:558
windowspython23 发布:2024-05-06 09:27:50 浏览:746
编程ug开初 发布:2024-05-06 09:27:48 浏览:560
小白源码论坛 发布:2024-05-06 09:24:56 浏览:139
android进程重启 发布:2024-05-06 09:15:09 浏览:96
ie浏览器设置默认ftp 发布:2024-05-06 09:14:03 浏览:885
迈腾尊贵中控配置怎么使用 发布:2024-05-06 09:13:28 浏览:656
奥迪存储卡格式不正确请格式化存储卡 发布:2024-05-06 09:01:31 浏览:34