studio工程生成jar包怎么忽略buildconfig.java文件

7183人阅读
Android(29)
之前在eclipse下同时引用多个Android Library Project时,会因为不同Library Project都引用了相同的包如android.support.v4而报错,比如用了actionbarsherlock,又引用了viewpagerIndicator。调来调去真是烦人啊。有时候调好了,eclipse运行还报class not find等稀奇古怪的错误。换了一个eclipse环境,同样的代码又不报错。总之,我对eclipse
算是伤透脑筋。
后来转向Android Studio后,发现真的是越用越好用啊。
在Android Studio中所有的工程文件称为一个Project,不同的工程文件称为Module。
在Android Studio中导入Android Library Project,如viewpagerIndicator,此时主Module中的Dependencies里已经有了一个android-support-v4的包,而Library Module里也有一个包,此时编译的时候就会报错。[Android Studio Workspace] UNEXPECTED TOP-LEVEL EXCEPTION:]
怎样解决这个问题呢?
主的Module和从属的Module 都需要调用android-support-v4包里的内容。去掉哪一个呢?Android Studio中有个Global Libraries的东西。
按住ctrl+shift+alt+s,弹出的Project Structure中有个Global Libraries选项卡。你可以把一个lib包中的东西设置为global的,这样其它的Modules都会调用这个lib里的东西。
我们先把Libraries中的两个android-support-v4包都删掉。这时候项目中引用v4包中的类都会报错了。
设置某个jar包为global library,如主工程Module中的v4包。
接下来给Library添加v4包。
添加的时候会有一个选项,可以从global libraries中选择。也就是说不用选择Library Project自己的v4包。
shift+f10,编译、运行成功。
爱死IntelliJ了!!!
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:82686次
积分:1278
积分:1278
排名:千里之外
原创:42篇
评论:30条
(1)(2)(1)(1)(1)(1)(2)(2)(1)(1)(5)(1)(2)(7)(7)(6)(2)21570人阅读
Android Studio基本使用(1)
Android Studio 如何打JAR包
在eclipse中我们知道如何将一个项目导出为jar包,供其它项目使用。
在AS中可以通过修改gradle才处理。
我们新建一个项目MakeJar,在项目中新建一个modle-类型为library
app为我们的主工程,librarydemo是我们要将其生成jar包的model.
在librarydemo中加入如下代码:
task makeJar(type: Copy) {
delete 'build/libs/mysdk.jar'
from('build/intermediates/bundles/release/')
into('build/libs/')
include('classes.jar')
rename ('classes.jar', 'mysdk.jar')
makeJar.dependsOn(build)
在Terminal中键入 gradlew makeJar
回车看到如下所示就OK了:
当然在主工程App的build中要加入librarydemo 这个依赖model:
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:22.2.0'
compile project(':librarydemo')
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:258484次
积分:3080
积分:3080
排名:第7635名
原创:56篇
评论:229条
(2)(1)(1)(1)(1)(2)(1)(1)(2)(5)(3)(2)(4)(1)(6)(2)(7)(23)Exclude BuildConfig.class from Android library jar in Gradle - Stack Overflow
to customize your list.
Stack Overflow is a community of 4.7 million programmers, just like you, helping each other.
J it only takes a minute:
Join the Stack Overflow community to:
Ask programming questions
Answer and help your peers
Get recognized for your expertise
When building an Android Library Project with Gradle, what's the correct way to exclude BuildConfig.class from the resulting .jar?
34k28121147
Solved with android.packageBuildConfig = false which is deprecated according to
34k28121147
Your Answer
Sign up or
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Post as a guest
By posting your answer, you agree to the
Not the answer you're looking for?
Browse other questions tagged
Stack Overflow works best with JavaScript enabledAndroid, Firefox OS, Mobile, .NET
随笔- 101&
通常情况下我们的apps发布后也就是release模式下log是不显示的,debug模式下是显示log的,但是在特殊情况下我们测试release包的时候需要log的时候,就无法使用BuildConfig.DEBUG来达到要求,因为在release模式下自动设置为false,debug模式下是true,这个时候我们需要自定义可控制的log开关。
Android Studio 对应的BuildConfig.java位置
在Studio中生成的目录:&/app/build/generated/source/buildConfig/&文件下的产品目录里面,找到想要的包名下会自动生成BuildConfig.java文件。我们可以看看下release模式下该文件的内容:
* Automatically generated file. DO NOT MODIFY
package com.leo.kang.
public final class BuildConfig {
public static final boolean DEBUG =
public static final String APPLICATION_ID = "com.leo.demo";
public static final String BUILD_TYPE = "release";
public static final String FLAVOR = "baidu";
public static final int VERSION_CODE = 47;
public static final String VERSION_NAME = "3.6.1";
public static final boolean LEO_LOG =
怎样自定义BuildConfig字段
在我们的build.gradle里面加入如下代码:
buildTypes {
// 不显示Log, 在java代码中的调用方式为:BuildConfig.LOG_DEBUG
buildConfigField "boolean", "LEO_DEBUG", "false"
minifyEnabled true
zipAlignEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release
// 显示Log
buildConfigField "boolean", "LEO_DEBUG", "true"
versionNameSuffix "-debug"
minifyEnabled false
zipAlignEnabled false
shrinkResources false
signingConfig signingConfigs.debug
buildConfigField "boolean", "LEO_DEBUG", "true"
上述语法就定义了一个boolean类型的LEO_DEBUG字段,值为true,之后我们就可以在程序中使用BuildConfig.LEO_DEBUG字段来判断我们所处的api环境。例如:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
CommonUtils.getVersionName(this);
initViews();
if(BuildConfig.LEO_DEBUG) {
Log.i("leo", "MainActivity.onCreate()");
阅读(...) 评论()关于ant 打包android引入第三方类库library project的终极解决方案
关于ant 打包android引入第三方类库library project的终极解决方案
关于ant 打包android引入第三方类库library project的终极解决方案==========前言==========
网上搜了很多种方案,但大多说得比较笼统
1、关于ant 打包android progect同时引入第三方library project注意点
2、android ant打包 引用第三方library
3、ant-build.xml打包应用程序【总结】
后来尝试了一下,又准备放弃,改用maven来打包,不过考虑到学习成本比较大...
不过后来还是在ant的基础上搞出来了,此帖不光能解决一个library的依赖问题,还能解决多个library递归依赖的问题。
==========正文==========
废话不多说,贴上build.xml&?xml version="1.0" encoding="UTF-8"?&
&project name="ProjectName" default="release" basedir="."&
&property file="config.properties"/&
& & &property file="ProjectHome.properties"/&
& & &!-- ANT环境变量 --&
& & &property environment="env" /&
& & &!-- 生成R文件的相对目录 --&
& & &property name="outdir-gen" value="${project.home}/gen" /&
& & &!-- 编译后的文件放置目录 --&
& & &property name="outdir-bin" value="${project.home}/bin" /&
& & &!-- 输出目录 --&
&property name="outdir" value="${project.outdir}" /&
& & &!-- 清单文件 --&
& & &property name="manifest-xml" value="${project.home}/AndroidManifest.xml" /&
& & &!-- 源文件目录 --&
& & &property name="resource-dir" value="res" /&
& & &property name="asset-dir" value="assets" /&
& & &!-- 资源文件目录 --&
& & &property name="drawable-dir" value="${resource-dir}/drawable" /&
& & &property name="drawable-hdpi-dir" value="${resource-dir}/drawable-hdpi"/&
& & &property name="drawable-ldpi-dir" value="${resource-dir}/drawable-ldpi"/&
& & &property name="drawable-mdpi-dir" value="${resource-dir}/drawable-mdpi"/&
& & &property name="drawable-zh-rCN-dir" value="${resource-dir}/drawable-zh-rCN"/&
& & &!-- java源文件目录 --&
& & &property name="srcdir" value="src" /&
& & &property name="srcdir-ospath" value="${project.home}/${srcdir}" /&
& & &!-- 动态库so文件目录 --&
& & &property name="library" value="${project.home}/libs" /&
& & &!-- 第三方library --&
& & &property name="library-dir" value="${library-dir}" /&
& & &property name="library-dir2" value="${library-dir2}" /&
& & &!-- 外部类库所在目录 --&
& & &property name="external-lib" value="lib" /&
& & &property name="external-lib-ospath" value="${project.home}/${external-lib}" /&
& & &!-- 生成class目录 --&
& & &property name="outdir-classes" value="${outdir-bin}/classes" /&
& & &property name="outdir-classes-ospath" value="${outdir-classes}" /&
& & &!-- classes.dex相关变量 --&
& & &property name="dex-file" value="classes.dex" /&
& & &property name="dex-path" value="${outdir-bin}/${dex-file}" /&
& & &property name="dex-ospath" value="${dex-path}" /&
& & &!-- 经过aapt生成的资源包文件 --&
& & &property name="resources-package" value="${outdir-bin}/resources.ap_" /&
& & &property name="resources-package-ospath" value="${resources-package}" /&
& & &!-- 未认证apk包 --&
& & &property name="out-unsigned-package" value="${outdir-bin}/${appName}-unsigned.apk" /&
& & &property name="out-unsigned-package-ospath" value="${out-unsigned-package}" /&
& & &!-- 证书文件 --&
& & &property name="keystore-file" value="${keystore}" /&
& & &!-- 已认证apk包 --&
& & &property name="out-signed-package" value="${outdir-bin}/${appName}.apk" /&
& & &property name="out-signed-package-ospath" value="${out-signed-package}" /&
& & &!-- 已优化apk包 --&
& & &property name="zipalign-signed-package" value="${outdir-bin}/${appName}${version}_release.apk" /&
& & &!-- 输出路径的apk包 --&
& & &property name="outdir-package" value="${project.outdir}/${appName}.apk" /&
& & &!-- 初始化工作 --&
& & &target name="init"&
& && &&&&echo&Initializing all output directories...&/echo&
& && &&&&delete dir="${outdir-bin}" /&
& && &&&&delete dir="${outdir-gen}" /&
& && &&&&mkdir dir="${outdir-gen}" /&
& && &&&&mkdir dir="${outdir-bin}" /&
& && &&&&mkdir dir="${outdir-classes}" /&
& & &!-- 把缺少的BuildConfig复制进去,暂时不知道如何生成 --&
& && &&&&copy file="ZI-master-BuildConfig.java" tofile="${outdir-gen}/com/yixia/zi/BuildConfig.java"&
& && && && & &filterset&
& && && && && & &filter token="CONFIG.FROM" value="${package.from}"/&
& && && && & &/filterset&
& && &&&&/copy&
& && &&&&copy file="VitamioBundle-BuildConfig.java" tofile="${outdir-gen}/com/yixia/vitamio/library/BuildConfig.java"&
& && && && & &filterset&
& && && && && & &filter token="CONFIG.FROM" value="${package.from}"/&
& && && && & &/filterset&
& && &&&&/copy&
& & &/target&
& & &!-- 根据工程中的资源文件生成R.java文件 --&
& & &target name="GenRJAVA" depends="init"&
& && &&&&echo&Generating R.java / Manifest.java from the resources...&/echo&
& && &&&&exec executable="${android-aapt}" failonerror="true"&
& && && && &&arg value="package" /&&!-- package表示打包--&
& && && && &&arg value="-m" /&&!--m,J,gen表示创建包名的目录和R.java到gen目录下 --&
& && && && &&arg value="-J" /&
& && && && &&arg value="${outdir-gen}" /&
& && && && &&arg value="-M" /&&!-- M指定AndroidManifest.xml文件--&
& && && && &&arg value="${manifest-xml}" /&
& && && && &&arg value="-S" /&&!-- S指定res目录,生成对应的ID,可多个--&
& && && && &&arg value="${resource-dir}" /&
& && && && &&arg value="-S" /&
& && && && &&arg value="${library-dir}/res" /&&!-- 注意点:同时需要调用Library的res--&
& && && && &&arg value="-S" /&
& && && && &&arg value="${library-dir2}/res" /&&!-- 注意点:同时需要调用Library的res--&
& && && && &&arg value="-I" /&&!-- I指定android包的位置--&
& && && && &&arg value="${android-jar}" /&
& && && && &&arg value="--auto-add-overlay" /& &!-- 这个重要,覆盖资源,不然报错--&
& && &&&&/exec&
& && &&&&!-- 根据库应用中的资源文件生成R.java文件 --&
& && &&&&exec executable="${android-aapt}" failonerror="true"&
& && && && &&arg value="package" /&
& && && && &&arg value="-m" /&
& && && && &&arg value="--auto-add-overlay" /&
& && && && &&arg value="-J" /&
& && && && &&arg value="${outdir-gen}" /&
& && && && &&arg value="-M" /&
& && && && &&arg value="${library-dir}/AndroidManifest.xml" /&&!-- 库应用的manifest--&
& && && && &&arg value="-S" /&
& && && && &&arg value="${resource-dir}" /&
& && && && &&arg value="-S" /&
& && && && &&arg value="${library-dir}/res" /&
& && && && &&arg value="-I" /&
& && && && &&arg value="${android-jar}" /&
& && &&&&/exec&
& && &&&&!-- 根据库应用中的资源文件生成R.java文件 --&
& && &&&&exec executable="${android-aapt}" failonerror="true"&
& && && && &&arg value="package" /&
& && && && &&arg value="-m" /&
& && && && &&arg value="--auto-add-overlay" /&
& && && && &&arg value="-J" /&
& && && && &&arg value="${outdir-gen}" /&
& && && && &&arg value="-M" /&
& && && && &&arg value="${library-dir2}/AndroidManifest.xml" /&&!-- 库应用的manifest--&
& && && && &&arg value="-S" /&
& && && && &&arg value="${resource-dir}" /&
& && && && &&arg value="-S" /&
& && && && &&arg value="${library-dir2}/res" /&
& && && && &&arg value="-I" /&
& && && && &&arg value="${android-jar}" /&
& && &&&&/exec&
& & &/target&
& & &!-- 将工程及库应用中的java源文件编译成class文件 --&
& & &target name="compile" depends="GenRJAVA"&
& && &&&&echo&Compiling java source code...&/echo&
& && &&&&javac encoding="UTF-8" destdir="${outdir-classes}" bootclasspath="${android-jar}"&
& && && && &&src path="${library-dir}/src" /&&!-- 库应用源码 --&
& && && && &&src path="${outdir-gen}" /&&!-- 生成的class文件全部保存到bin/classes目录下 --&
& && && && &&classpath&
& && && && && & &fileset dir="${library-dir}/libs" includes="*.jar" /&&!-- 第三方jar包需要引用,用于辅助编译 --&
& && && && &&/classpath&
& && &&&&/javac&
& && &&&&javac encoding="UTF-8" destdir="${outdir-classes}" bootclasspath="${android-jar}"&
& && && && &&src path="${library-dir2}/src" /&&!-- 库应用源码 --&
& && && && &&src path="${outdir-gen}" /&&!-- 生成的class文件全部保存到bin/classes目录下 --&
& && && && &&classpath&
& && && && && & &fileset dir="${library-dir2}/libs" includes="*.jar" /&&!-- 第三方jar包需要引用,用于辅助编译 --&
& && && && &&/classpath&
& && &&&&/javac&
& && &&&&javac encoding="UTF-8" destdir="${outdir-classes}" bootclasspath="${android-jar}"&
& && && && &&src path="${project.home}/src" /&&!-- 工程源码--&
& && && && &&src path="${outdir-gen}" /&&!-- 生成的class文件全部保存到bin/classes目录下 --&
& && && && &&classpath&
& && && && && & &fileset dir="${library}" includes="*.jar" /&&!-- 第三方jar包需要引用,用于辅助编译 --&
& && && && &&/classpath&
& && &&&&/javac&
& & &/target&
& & &!-- 将.class文件转化成.dex文件 --&
& & &target name="dex" depends="compile"&
& && &&&&echo&Converting compiled files and external libraries into ${outdir-dx}test.dex...&/echo&
& && &&&&exec executable="${android-dx}" failonerror="true"&
& && && && &&arg value="--dex" /&
& && && && &&arg value="--output=${dex-ospath}" /&&!-- 输出 --&
& && && && &&arg path="${outdir-classes}" /&&!-- classes文件位置 --&
& && && && &&arg value="${library}" /& &!-- 把libs下所有jar打包 --&
& && &&&&/exec&
& & &/target&
& & &!-- 将资源文件放进输出目录 --&
& & &target name="package-res-and-assets"&
& && &&&&echo&Packaging resources and assets...&/echo&
& && &&&&exec executable="${android-aapt}" failonerror="true"&
& && && && &&arg value="package" /&
& && && && &&arg value="-f" /&&!-- 资源覆盖重写 --&
& && && && &&arg value="-M" /&
& && && && &&arg value="${manifest-xml}" /&
& && && && &&arg value="-S" /&
& && && && &&arg value="${resource-dir}" /&
& && && && &&arg value="-S"/&
& && && && &&arg value="${library-dir}/res"/&
& && && && &&arg value="-S"/&
& && && && &&arg value="${library-dir2}/res"/&
& && && && &&arg value="-A" /&&!-- asset目录也打包 --&
& && && && &&arg value="${asset-dir}" /&
& && && && &&arg value="-I" /&
& && && && &&arg value="${android-jar}" /&
& && && && &&arg value="-F" /&&!-- 输出资源压缩包 --&
& && && && &&arg value="${resources-package}" /&
& && && && &&arg value="--auto-add-overlay" /&
& && &&&&/exec&
& & &/target&
& & &!-- 打包成未签证的apk --&
& & &target name="package" depends="dex,package-res-and-assets"&
& && &&&&echo&Packaging unsigned apk for release...&/echo&
& && &&&&exec executable="${android-apkbuilder}" &
& && && && &&arg value="${out-unsigned-package-ospath}" /&&!-- 输出 --&
& && && && &&arg value="-u" /&&!-- u指创建未签名的包--&
& && && && &&arg value="-z" /&&!-- 资源压缩包 --&
& && && && &&arg value="${resources-package-ospath}" /&
& && && && &&arg value="-f" /&&!-- dex文件 --&
& && && && &&arg value="${dex-ospath}" /&
& && && && &&arg value="-nf"/&&!-- 把libs下的so库打包 --&
& && && && &&arg value="${library}" /&
& && &&&&/exec&
& && &&&&echo&It will need to be signed with jarsigner before being published.&/echo&
& & &/target&
& & &!-- 对apk进行签证 --&
& & &target name="jarsigner" depends="package"&
& && &&&&echo&Packaging signed apk for release...&/echo&
& && &&&&exec executable="${android-jarsigner}" failonerror="true"&
& && && && &&arg value="-keystore" /&
& && && && &&arg value="${keystore-file}" /&
& && && && &&arg value="-storepass" /&
& && && && &&arg value="111111" /&&!-- 验证密钥完整性的口令,创建时建立的 --&
& && && && &&arg value="-keypass" /&
& && && && &&arg value="111111" /& &!-- 专用密钥的口令,就是key密码 --&
& && && && &&arg value="-signedjar" /&
& && && && &&arg value="${out-signed-package-ospath}" /&&!-- 输出 --&
& && && && &&arg value="${out-unsigned-package-ospath}" /&&!-- 未签名的apk --&
& && && && &&!-- 不要忘了证书的别名 --&
& && && && &&arg value="kunshan" /&
& && &&&&/exec&
& & &/target&
& & &!-- 优化 --&
& & &target name="optimize-app" depends="jarsigner"&
& && &&echo& optimizing the application...&/echo&
& && &&exec executable="${android-zipalign}"&
& && &&&&arg value="-v" /&
& && &&&&arg value="-f" /&
& && &&&&arg value="4" /&
& && &&&&arg value="${out-signed-package-ospath}" /&
& && &&&&arg value="${zipalign-signed-package}" /&
& &&&&/exec&
& & &/target&
& & &!-- 发布 --&
& & &target name="release" depends="optimize-app"&
& && &&&&!-- 删除未签证apk --&
& && &&&&delete file="${out-unsigned-package-ospath}" /&
& && &&&&echo&APK is released. path:${out-signed-package-ospath}&/echo&
& && &&&&copy file="${out-signed-package-ospath}" tofile="${outdir-package}"&&/copy&
& && &&&&echo&APK is copy to path:${outdir-package}&/echo&
& & &/target&
&/project&复制代码=========解析=========
其中动态库so文件目录我是没用到了,不过第三方library我是用到了两个,所以定义了两个,注意,我们的两个library里面有依赖关系,
library-dir2依赖library-dir
重点1,资源文件打包:
根据工程中的资源文件生成R.java文件,我会把library中的res和library2中的res都打包到我的最终目录中。(具体自己看代码)
重点2,src文件打包:
同样的道理,复制两份,自己看代码应该看得明白。
重点3:这时我们来运行ant命令来打包了,打包资源文件的时候很容易打包,没有报错,但是打包src文件的时候,会提示找不到BuildConfig.java
原来我使用了ZI-master,代码里面会使用到gen下的BuildConfig.java,但是我们的ant命令并没有生成BuildConfig.java,只能生成R.java。
好蛋疼,网上搜到了一个BuildConfig模板的解决方案,但是不好用,于是我想到了一个复制的方法,手动写死把代码复制进去。
来源,俺的博客:
发表评论:
馆藏&18954
TA的最新馆藏

我要回帖

更多关于 buildconfig.java 的文章

 

随机推荐