于是检查了一遍每一个依赖,排除了这个原因后还是无法打包,问题依旧是这个,终于找到一个老哥的解决方法受到启发解决Program type already present: com.baidu.idl.facesdk.BuildConfig AGPBI: {"kind":"error","text":"Program type already present: comxxx.BuildConfig","sources":[{}],"tool ":"D8"} Error while merging dex archives: Program type already present: com.xxx.BuildConfig 看吧这个错误
解决方案 一、报错信息 ---- 报错信息 : D:\002_Project\002_Android_Learn\ClassLoader_Demo\app\build\generated\source\buildConfig \debug\com\example\classloader_demo\BuildConfig.java:15: 错误: 找不到符号 public static final String market = GooglePlay; ^ 符号: 变量 GooglePlay 位置: 类 BuildConfig 在 Android , isGooglePlay) // 当前的应用市场 buildConfigField("String", "market", market) } } 生成的 BuildConfig.java DO NOT MODIFY */ package com.example.classloader_demo; public final class BuildConfig { public static
文章目录 一、ProductFlavor#buildConfigField 方法 二、单独执行 Gradle 编译 BuildConfig 的任务 Android Plugin DSL Reference 类中 , 生成的字段 ; 向生成的 BuildConfig 类添加一个新字段。 这里调用 void buildConfigField(String type, String name, String value) 方法 , 向 生成的 BuildConfig 类中添加新的字段 , 类 : package com.example.classloader_demo; public final class BuildConfig { public static final boolean 中调用该参数 博客 ; 二、单独执行 Gradle 编译 BuildConfig 的任务 ---- Android Gradle 插件中 , 提供了单独编译 BuildConfig 类的 Gradle
文章目录 一、gradle.properties 中配置编译参数 二、在 build.gradle 中配置 BuildConfig.java 生成信息 三、编译后生成的 BuildConfig 类 Android 生成信息 ---- 这里调用 void buildConfigField(String type, String name, String value) 方法 , 向 生成的 BuildConfig 需要使用如下样式声明 , 字符串外部的双引号 , 也需要手动使用转移字符串生成 ; buildConfigField("String", "market", "\"${market}\"") 声明 BuildConfig 类 ---- 选择 " 菜单栏 / Build / Make Project " 选项 编译整个工程 , 或者使用 Ctrl + F9 快捷键 ; 编译完成后生成的 BuildConfig 类 : package com.example.classloader_demo; public final class BuildConfig { public static final boolean
Android 工程修改包名流程 二、 修改 applicationId 三、 修改 package 包名 四、 AndroidManifest.xml 清单文件组件 五、 修改 R 资源引用、修改 BuildConfig 引用 : 修改 Java 代码中的 package.BuildConfig 引用 ; ⑤ AndroidManifest.xml 清单文件修改 : 所有的组件都使用全路径名称 , FileProvider 引用 ---- 包名修改后 , 对应生成的资源类 R , 编译配置类 BuildConfig 的包名也发生了相应的改变 ; 需要将 import kim.hsl.package_change.R .BuildConfig; 对于源码中修改的 R 较多时 , 选中源码目录 src , 使用 " Ctrl + Shift + R " 快捷键 , 也可以右键点击 src 目录 , 选择 " Replace .BuildConfig;” ( 在该示例中只有一个 , 如果是一个大型项目 , 会有几百上千的匹配 ) 六、 修改 FileProvider ---- 由于忽略了该步骤 , 导致出错 , 【错误记录
文章目录 一、组件模式下为组件 Module 指定 Java 源码路径 二、主应用的角色 三、BuildConfig 中生成当前 组件 / 集成 模式字段 四、Library Module 中的代码示例 配置中 , 生成一些选项 , 如下代码就可以在 BuildConfig.java 类中生成 public static final boolean isModuleMode = false; 字段 ; android { defaultConfig { // 在 BuildConfig 中生成如下字段 // public static final boolean DO NOT MODIFY */ package kim.hsl.library1; public final class BuildConfig { public static final boolean public static final boolean isModuleMode = false; } 在 Java 代码中通过调用 BuildConfig.isModuleMode 获取当前 Module
build configuration或BuildConfig的特点是strategy和一个或多个source。strategy决定了构建过程,而source提供其输入。 构建配置由BuildConfig定义,它是一个REST对象,可以在POST中用于创建新实例的API服务器。 根据您选择使用OpenShift Origin创建应用程序的方式,如果使用Web控制台或CLI,BuildConfig通常会自动为您生成,并且可以随时对其进行编辑。 如果您选择稍后手动调整配置,那么理解组成BuildConfig的部件及其可用选项可以提供帮助。 BuildConfig Object Definition kind: "BuildConfig" apiVersion: "v1" metadata: name: "ruby-sample-build
UMENG_CHANNEL_VALUE: "wandoujia"] } } 3.Gradle中buildConfigField的配置 通过在Gradle文件中配置的buildConfigField可以在自动生成的BuildConfig 在build.gralde中添加一些BuildConfig字段 defaultConfig { applicationId "io.awesome" minSdkVersion 16 xxx dribbble_client_secret = yyy dribbble_client_access_token = zzz 待Gradle Sync之后在文件app/build/source/BuildConfig /Build Varients/package name/BuildConfig就会看到添加的字段 public final class BuildConfig { public static final
一、build.gradle 里利用 BuildConfig.DEBUG 自动切换 android { ... Application { @Override public void onCreate() { super.onCreate(); // 只在 debug 编译时生效,release 版不会打印也不会初始化 if (BuildConfig.LOG_OPEN 、Kotlin 更简洁 class App : Application() { override fun onCreate() { super.onCreate() XLog.init(if (BuildConfig.LOG_OPEN RemoteConfig.isLogOpen()) { XLog.init(LogLevel.NONE);// 立即停打 } 五、一行总结 debug / release 双包场景: gradle 里 BuildConfig.LOG_OPEN
the build even when errors are found: abortOnError false } } 二、日志处理 ---- 根据当前编译配置中的编译类型 BuildConfig.DEBUG , 选择是否打印日志 ; public final class BuildConfig { public static final boolean DEBUG = Boolean.parseBoolean final int VERSION_CODE = 1; public static final String VERSION_NAME = "0.1"; } 如果当前是 release 版本 , 则 BuildConfig.DEBUG ; 开发日志工具类 Log 示例 : public class L { public static void i(String TAG, String msg) { if (BuildConfig.DEBUG
public class MainActivity extends AppCompatActivity { Button btn; public final String pName = BuildConfig.APPLICATION_ID toString(); PackageInfo pinfo = MainActivity.this.getPackageManager().getPackageInfo(BuildConfig.APPLICATION_ID Toast.makeText(MainActivity.this, "年轻人不要耍小聪明噢", 1).show(); } }); } } 点击BuildConfig 如下图所示: package com.example.yaphetshan.tencentgreat; /* loaded from: classes.dex */ public final class BuildConfig
BuildConfig 从 YAML 加载 BuildConfig: BuildConfig buildConfig = client.buildConfigs() .inNamespace(" FunTester") .load(new FileInputStream("test-buildconfig.yml")).item(); 创建 BuildConfig: BuildConfig buildConfig = new BuildConfigBuilder() .withNewMetadata().withName("bc1").endMetadata() .withNewSpec ).endOutput() .endSpec() .build(); client.buildConfigs().inNamespace("FunTester").resource(buildConfig ).create(); 列出 BuildConfig: BuildConfigList bcList = client.buildConfigs() .inNamespace("FunTester
java.lang.String)’ on a null object reference 根据日志定位到错误是: Uri contentUri = FileProvider.getUriForFile(context, BuildConfig.APPLICATION_ID android:resource="@xml/file_paths" /> </provider> 还有就是在工具类哪里打开下载文件的方法,也统一用自己项目包下的BuildConfig.APPLICATION_ID FileProvider.getUriForFile(context.getApplicationContext(), BuildConfig.APPLICATION_ID+”.provider”,new com.xxxx.xxxx.fileprovider", apkFile); Uri contentUri = FileProvider.getUriForFile(context, BuildConfig.APPLICATION_ID
会自动运行到BuildConfig里,可以判断不同的值去加载不同的接口环境 /** * 是否测试环境 */ public static boolean isTest() { return BuildConfig.isTestEnv; } ServiceInfoManager.getInstance().setEnv(IqbConfig.isTest ServiceInfoManager.Environment.TestEnv : ServiceInfoManager.Environment.PublicEnv); BuildConfig.DEBUG 始终为 false BuildConfig.java 是编译时自动生成的,并且每个 Module 都会生成一份,以该 Module 的 packageName 为 BuildConfig.java 所以如果你的应用有多个 Module 就会有多个 BuildConfig.java 生成,编译时被依赖的 Module 默认会提供 Release 版给其他 Module 或工程使用,这就导致该 BuildConfig.DEBUG
// Finclip SDK 的key 在平台上获取的 BuildConfig.APP_SECRET //Finclip SDK 的secret 在平台上获取的 FinAppConfig.ENCRYPTION_TYPE_SM // 加密类型 BuildConfig.API_URL //如果不是私有化部署默认填写 https://mp.finogeeks.com 这个就行了 FinAppConfig config = new FinAppConfig.Builder() .setSdkKey(BuildConfig.APP_KEY) .setSdkSecret (BuildConfig.APP_SECRET) .setApiUrl(BuildConfig.API_URL) .setApiPrefix (BuildConfig.API_PREFIX) .setDebugMode(BuildConfig.DEBUG) .setEncryptionType
intent = new Intent(); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.putExtra("packageName", BuildConfig.APPLICATION_ID intent = new Intent(); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.putExtra("packageName", BuildConfig.APPLICATION_ID intent = new Intent(); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.putExtra("packageName", BuildConfig.APPLICATION_ID android.intent.action.MAIN"); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.putExtra("packageName", BuildConfig.APPLICATION_ID intent = new Intent(); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.putExtra("packageName", BuildConfig.APPLICATION_ID
{ if (BuildConfig.DEBUG) { Log.d("debugLog", message) } } private fun testDebugLog() { if (BuildConfig.DEBUG) { Log.d("debugMessage", args.joinToString()) } } private fun { if (BuildConfig.DEBUG) { Log.d("smartMessage", lazyMessage().toString()) } } private 5 6 7 8 9 10 private final void testSmartMessage() { int $i$f$smartMessage = false; if (BuildConfig.DEBUG String.valueOf(var4)); } } 之前的Lambda 由于采用了 inline 处理 会把smartMessage 提取到调用处testSmartMessage 上面的信息,都是确保了在BuildConfig.DEBUG
intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); Uri uri = FileProvider.getUriForFile(getContext(), BuildConfig.APPLICATION_ID Android 7.0以上发起调用的Uri必须通过FileProvider来获取,也就是下面这句: Uri uri = FileProvider.getUriForFile(getContext(), BuildConfig.APPLICATION_ID 文件中配置的一致 第二个就比较坑了,如果是模块化开发,需要特别注意包名的一致 再来看看那句代码: Uri uri = FileProvider.getUriForFile(getContext(), BuildConfig.APPLICATION_ID + ".fileProvider", file); 坑就在BuildConfig.APPLICATION_ID这里,如果用BuildConfig来获取APPLICATION_ID,在模块化开发中就会出现不一致的情况 比如打开相机的模块是camera,我们应用的包名是com.my.app,那么BuildConfig.APPLICATION_ID的值就不一样了: camera模块:com.my.app.camera 我们
3、BuildConfig.class 文件冲突 Error:Execution failed for task ':ipark2:transformClassesWithJarMergingForDebug com.android.build.api.transform.TransformException: java.util.zip.ZipException: duplicate entry: com/xxxxx/xxxxx/xxxx/BuildConfig.class 这个就说你的 com/xxxxx/xxxxx/xxxx/ 目录下的BuildConfig.class 文件冲突了 。 执行命令之后 会发现目录下多了一个jar包解压后的文件,在该文件夹下按目录找到BuildConfig.class 文件, 删除 3、重新把处理后的文件夹压缩成jar包 jar cvf SensorSSS.jar com 注:SensorSSS 即重新生成的jar包的名字 , com即 要被压缩成jar包的文件夹(即原先jar包解压缩出来的文件并删除BuildConfig.class
; if(process.env.NODE_ENV === 'dev') { buildConfig = require('. /build/gulp.dev'); gulp.task('server', buildConfig.server); // 本地服务 } else { buildConfig /build/gulp.prod'); // gulp.task('md5', gulp.series(buildConfig.md5Css, buildConfig.md5Js)); gulp.task('clean', buildConfig.clean); // 清理目录 } gulp.task('html', buildConfig.html); // 打包html gulp.task('js', buildConfig.js); // 打包js gulp.task('css', buildConfig.css); //