GVKun编程网logo

在DTColumnBuilder renderwidth上包含自定义指令(dt.columns.add)

24

关于在DTColumnBuilderrenderwidth上包含自定义指令和dt.columns.add的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于android–CordovaBui

关于在DTColumnBuilder renderwidth上包含自定义指令dt.columns.add的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于android – Cordova Build失败,未指定buildToolsVersion、Android 自定义构建类型 BuildType、android.support.v4.app.NotificationBuilderWithBuilderAccessor的实例源码、Android配置build.gradle的buildTypes动态自动维护debug和release包自定义字段变量值等相关知识的信息别忘了在本站进行查找喔。

本文目录一览:

在DTColumnBuilder renderwidth上包含自定义指令(dt.columns.add)

在DTColumnBuilder renderwidth上包含自定义指令(dt.columns.add)

有没有办法让DTColumnBuilder.newColumn.renderWidth包含自定义指令?这是我要实现的代码草案。

DTColumnBuilder.newColumn(''reportStructureName'').withTitle(''Structure Name'')    .renderWith((data, type, full) => {          return "<my-directive></my-directive>";      }),

答案1

小编典典

您可以$compilecreatedCell回调中包含单元格内容。这是一个非常简单的示例,该伪指令仅将文本着色为红色。很抱歉没有使用箭头功能:)

$scope.data = [     { reportStructureName : "structurename1" },     { reportStructureName : "structurename2" },     { reportStructureName : "structurename3" },     { reportStructureName : "structurename4" }]$scope.dtOptions = DTOptionsBuilder.newOptions()    .withOption(''data'', $scope.data)    .withPaginationType(''full_numbers'');$scope.dtColumns = [          DTColumnBuilder.newColumn(''reportStructureName'')    .withTitle(''Structure Name'')    .renderWith(function(data, type, full) {       return "<my-directive>"+data+"</my-directive>";     })          .withOption(''createdCell'', function(td, cellData, rowData, row, col) {       $compile( td )( $scope ); //<--- here    })  ]

指令:

.directive(''myDirective'', function() {  return {    restrict: ''AE'',    link: function (scope, element, attr, ctrl) {       angular.element(element).css(''color'', ''red'')    }     }})

演示->
http://plnkr.co/edit/aok6SyWZlLaQv8UsEVIf?p=preview

android – Cordova Build失败,未指定buildToolsVersion

android – Cordova Build失败,未指定buildToolsVersion

这是我得到的确切错误;

F:\XXX\XXX\XXX\myApp-1>cordova build android
ANDROID_HOME=L:\android-sdks
JAVA_HOME=C:\Program Files\Java\jdk1.8.0_45
Failed to notify ProjectEvaluationListener.afterEvaluate(), but primary configur
ation failure takes precedence.
java.lang.IllegalStateException: buildToolsversion is not specified.
        at com.google.common.base.Preconditions.checkState(Preconditions.java:17
6)
        at com.android.build.gradle.BasePlugin.createAndroidTasks(BasePlugin.jav
a:599)
        at com.android.build.gradle.BasePlugin$10$1.call(BasePlugin.java:566)
        at com.android.build.gradle.BasePlugin$10$1.call(BasePlugin.java:563)
        at com.android.builder.profile.ThreadRecorder$1.record(ThreadRecorder.ja
va:55)
        at com.android.builder.profile.ThreadRecorder$1.record(ThreadRecorder.ja
va:47)
        at com.android.build.gradle.BasePlugin$10.execute(BasePlugin.java:562)
        at com.android.build.gradle.BasePlugin$10.execute(BasePlugin.java:559)
        at org.gradle.listener.broadcastdispatch$ActionInvocationHandler.dispatc
h(broadcastdispatch.java:109)
        at org.gradle.listener.broadcastdispatch$ActionInvocationHandler.dispatc
h(broadcastdispatch.java:98)
        at org.gradle.listener.broadcastdispatch.dispatch(broadcastdispatch.java
:83)
        at org.gradle.listener.broadcastdispatch.dispatch(broadcastdispatch.java
:31)
        at org.gradle.messaging.dispatch.ProxydispatchAdapter$dispatchingInvocat
ionHandler.invoke(ProxydispatchAdapter.java:93)
        at com.sun.proxy.$Proxy12.afterEvaluate(UnkNown Source)
        at org.gradle.configuration.project.LifecycleProjectEvaluator.notifyAfte
rEvaluate(LifecycleProjectEvaluator.java:79)
        at org.gradle.configuration.project.LifecycleProjectEvaluator.evaluate(L
ifecycleProjectEvaluator.java:65)
        at org.gradle.api.internal.project.AbstractProject.evaluate(AbstractProj
ect.java:504)
        at org.gradle.api.internal.project.AbstractProject.evaluate(AbstractProj
ect.java:83)
        at org.gradle.execution.TaskPathProjectEvaluator.configureHierarchy(Task
PathProjectEvaluator.java:42)
        at org.gradle.configuration.DefaultBuildConfigurer.configure(DefaultBuil
dConfigurer.java:35)
        at org.gradle.initialization.DefaultGradleLauncher.dobuildStages(Default
GradleLauncher.java:129)
        at org.gradle.initialization.DefaultGradleLauncher.dobuild(DefaultGradle
Launcher.java:106)
        at org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLaun
cher.java:86)
        at org.gradle.launcher.exec.InProcessBuildActionExecuter$DefaultBuildCon
troller.run(InProcessBuildActionExecuter.java:80)
        at org.gradle.launcher.cli.ExecuteBuildAction.run(ExecuteBuildAction.jav
a:33)
        at org.gradle.launcher.cli.ExecuteBuildAction.run(ExecuteBuildAction.jav
a:24)
        at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProce
ssBuildActionExecuter.java:36)
        at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProce
ssBuildActionExecuter.java:26)
        at org.gradle.launcher.daemon.server.exec.ExecuteBuild.dobuild(ExecuteBu
ild.java:47)
        at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(Build
CommandOnly.java:34)
        at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed
(DaemonCommandExecution.java:119)
        at org.gradle.launcher.daemon.server.exec.WatchFordisconnection.execute(
WatchFordisconnection.java:35)
        at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed
(DaemonCommandExecution.java:119)
        at org.gradle.launcher.daemon.server.exec.ResetDeprecationLogger.execute
(ResetDeprecationLogger.java:24)
        at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed
(DaemonCommandExecution.java:119)
        at org.gradle.launcher.daemon.server.exec.StartStopIfBuildAndStop.execut
e(StartStopIfBuildAndStop.java:33)
        at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed
(DaemonCommandExecution.java:119)
        at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(Forw
ardClientInput.java:71)
        at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(Forw
ardClientInput.java:69)
        at org.gradle.util.Swapper.swap(Swapper.java:38)
        at org.gradle.launcher.daemon.server.exec.ForwardClientInput.execute(For
wardClientInput.java:69)
        at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed
(DaemonCommandExecution.java:119)
        at org.gradle.launcher.daemon.server.exec.LogToClient.dobuild(LogToClien
t.java:60)
        at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(Build
CommandOnly.java:34)
        at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed
(DaemonCommandExecution.java:119)
        at org.gradle.launcher.daemon.server.exec.EstablishBuildEnvironment.dobu
ild(EstablishBuildEnvironment.java:70)
        at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(Build
CommandOnly.java:34)
        at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed
(DaemonCommandExecution.java:119)
        at org.gradle.launcher.daemon.server.exec.DaemonhygieneAction.execute(Da
emonhygieneAction.java:39)
        at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed
(DaemonCommandExecution.java:119)
        at org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy$1.
run(StartBuildOrRespondWithBusy.java:46)
        at org.gradle.launcher.daemon.server.DaemonStateCoordinator$1.run(Daemon
StateCoordinator.java:246)
        at org.gradle.internal.concurrent.DefaultExecutorFactory$StoppableExecut
orImpl$1.run(DefaultExecutorFactory.java:64)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.
java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor
.java:617)
        at java.lang.Thread.run(Thread.java:745)

FAILURE: Build Failed with an exception.

* Where:
Script 'F:\XXX\XXX\XXX\myApp-1\platforms\android\Cordova
Lib\cordova.gradle' line: 40

* What went wrong:
A problem occurred evaluating root project 'android'.
> cordova_9wgvcsxf5r9stvckgd0tfi8q2$_getAvailableBuildTools_closure3

* Try:

Run with --stacktrace option to get the stack trace. Run with --info or --debug
option to get more log output.
BUILD Failed

Total time: 10.712 secs
Error: Error code 1 for command: cmd with args: /s,/c,""F:\XXX\XXX\XXX\myApp-1\platforms\android\gradlew" cdvBuildDebug -b "F:\XXX
\XXX\XXX\myApp-1\platforms\android\build.gradle" -Dorg.gradle.
daemon=true -Pandroid.useDeprecatedndk=true"

我已经在这里阅读了针对这个问题发布的不同解决方案,对我来说只需申请

cordova platforms remove android

然后

cordova platforms add android

习惯于解决它,但现在甚至没有工作.令人沮丧的部分是我在同一台计算机上有两个项目,我一直在更新,一个构建,而另一个没有.所以我不能责怪ANDROID_HOME等.当我这样说时,我的意思是:

F:\XXX\XXX\XXX\myApp-2>Cordova build android

完美的工作.

有什么想法吗?我有什么办法毁了我的项目吗?我确信这两种配置都很相似,但如果有人能指出我正确的方式,我会感激不尽.谢谢.

解决方法:

我遇到过同样的问题.我把它固定如下: –

打开Android工作室配置.

转到配置> SDK管理器> Android SDK> SDK工具并安装Android SDK Build-Tools.

检查ANDROID_HOME变量.我在Mac上,所以它指向“/ Users /< user_name> / Library / Android / sdk /”.如果您在其他系统上,则需要找到正确的路径.

如果设置不正确,请按如下方式设置: –

export ANDROID_HOME =“/ Users /< user_name> / Library / Android / sdk /”

现在再次构建它应该可以正常工作

If you have not installed android studio the path can be different and you need to find out the actual path. I would recommend installing Android Studio as it makes things lot easier.

Android 自定义构建类型 BuildType

Android 自定义构建类型 BuildType

最近接触到自定义构建类型 BuildType,发现这一块有些地方稍不注意的话会被绕进去浪费点时间,既然我这边已经花费时间了,如果正好你也需要接触到 BuildType,也许接下来分享的 tips 可能会帮你节省些时间。

缘起

BuildType 相信许多开发者都不陌生,很常见的一种使用场景是线上、线下的后台接口 BaseUrl 不同,许多人会选择在 build.gradle 文件的 buildTypes 中定义全局变量来实现线上线下环境的定义 (Gradle 2.x 版本),例如:

buildTypes {
    debug {
        buildConfigField "String", "BASE_URL", "\"http://debug.api/\""
    }
    release {
        buildConfigField "String", "BASE_URL", "\"https://release.api/\""        
    }
}

在开发过程中,除了默认的 Debug 和 Release 版本,我们可能还需要为程序自定义一些东西。比如在上线 release 版本前,还需要一个预发布版本,该版本除了后台接口的 BaseUrl 与线上版本不同外,其他资源(包括数据库环境)都与线上相同,该版本用来做发布前的最后测试,最大程度避免线上环境出问题。如果每次打预发版本都去直接修改代码中的 BaseUrl 很明显不是最优解。有一种解决方案是自定义 BuildType,在 app 模块下的 build.gradle 的 buildTypes 中自定义新的构建版本:

buildTypes {
    debug {
        buildConfigField "String", "BASE_URL", "\"http://debug.api/\""
    }

    release {
        buildConfigField "String", "BASE_URL", "\"https://release.api/\""        
    }

    pre.initWith(release) 
    pre {
        buildConfigField "String", "BASE_URL", "\"https://pre.api/\""  
    }
}

//java 类中调用 BuildConfig.BASE_URL 获取定义的变量

 

initWith() 是 BuildType 的一项配置项,我们还可以看到上文中提到的 buildConfigField 其实也是一项配置项。该配置可以理解成 initWith(release) 可以理解成拷贝了 release 这一构建类型的所有变量,因为我们知道,每一个构建类型都有一些默认的变量,例如 debuggablezipAlignEnabled 等,使用该配置就免去为新增的构建类型定义所有的变量。 
定义了新的构建类型后,gradle 会自动生成新的 task,使用 gradle assemblePre 即可打包新定义的预发包。这里需要稍微注意的地方就是,必须在 app 模块下的 build.gradle 中定义新的构建类型,gradle 才会生成新的 task。

Moduel 中自定义 BuildType 的问题

随着现在模块化开发越来越流行,许多项目都会将一些业务无关的模块独立出去,作为 Moduel 在项目中依赖使用,以此达到复用的效果。很常见的例如网络库可能就会被独立出来,那么上文中的关于就会被定义在子 Module 中。这里不注意的话就会浪费一些时间。假设你在 app 模块与子模块的 build.gradle 的 buildTypes 中都如上文定义了三种类型 debug 
、release、pre 版本的 BASE_URL请注意

如果你执行了 gradle assemblePre,没错是构建了 pre 版本,但是打印出日志你会发现:

app.BuildConfig.BASE_URL = "https://pre.api/"
module.BuildConfig.BASE_URL = "https://release.api/"

子模块中如果没有特别指定构建版本,无论你执行的是 gradle assemblePre 还是 gradle assembleDebug,构建的都是 release 版本。可以使用 defaultPublishConfig 配置指定需要构建的版本,例如在子模块的 build.gradle 中指定:

android {
    ...
    //指定构建版本
    defaultPublishConfig "pre"
    ...
}

当然最好设置个变量,否则如果有许多子模块,不可能修改构建版本时一个一个改过去,常用的是在项目最外层的 build.gradle 中设置变量供子模块调用:

buildscript {
    ...
    dependencies {
        classpath ''com.android.tools.build:gradle:2.3.3''
    }
    ...
}
ext {
    projectBuildType = "debug"
}

//子模块中引用变量
defaultPublishConfig rootProject.ext.projectBuildType

这里需要注意,一旦子模块中指定了构建类型,例如 pre 版本,则该模块的 buildTypes 中必须也要有对应的构建类型 pre,否则编译不通过。并且,一旦指定了构建类型,则该模块的构建类型就只会是指定的类型。举个栗子:子模块中指定了 defaultPublishConfig "pre", 执行 gradle assembleRelease,打印日志:

app.BuildConfig.BASE_URL = "https://release.api/"
module.BuildConfig.BASE_URL = "https://pre.api/"

所以这里就会比较烦人,每次打不同的包都需要去修改 projectBuildType 的值,还是需要手动修改。

分支名决定构建的版本类型

想要隔离手动修改,网上看到过一种解决方案: 
子模块的 build.gradle 中设置:

android {
    publishNonDefault true
}

然后在模块的依赖处,例如 app 模块的 build.gradle 中改进依赖的写法:

releaseCompile project(path: '':module'', configuration: ''release'')
debugCompile project(path: '':module'', configuration: ''debug'')

这样就可以实现构建时子模块与 app 模块的类型一致。但这种写法太烦了,如果你有十来个依赖,还得一个一个写过去,又如果你还自定义了不止一种构建类型,且没新增一个新的 buildType 都得修改所有的依赖,我认为也不是最优解。

这里提供一个方案仅供参考。先介绍一下我们的开发流程,例如新开发 1.0 版本。首先从 master 切出一条 devel1.0 分支用于前期开发阶段,开发完毕达到上线标准后,切出一条 pre1.0 预发分支,打预发包做最后测试并做最后的 bug 修复,最后测试通过,合并代码到 master 分支,打线上包发布至应用商店。不同阶段对应不同的分支,所以不同的构建版本可以通过分支名来决定,git 肯定可以获取当前分支名,而 grale 中则可以执行 cmd 命令,二者结合即可达到想要的效果。有这个思路后实现起来就很简单:

ext {
    projectBuildType = "debug"

    def gitBranchName = "git rev-parse --abbrev-ref HEAD".execute().text.trim()

    if(gitBranchName.contains("master")) {
        projectBuildType =  "release"
    } else if(gitBranchName.contains("pre")) {
        projectBuildType =  "pre"
    }
}

Gradle 3.0.0 带来的问题

Android Studio 3.0 + Gradle 3.0 相信许多人都跃跃欲试。升级到 Gradle 3.0 可能需要做一些改动,详情可见 Migrate to Android Plugin for Gradle 3.0.0。 
Gradle3.0 中自定义 BuildType 有需要注意的地方

Cause of build error

Your app includes a build type that a library dependency does not.

在 Gradle 2.x 时代,如果 app 中定义了 pre 类型,而子模块中没有定义,是不会报错的。但在 Gradle 3.0 下,如果你的 app 包含了新的自定义的 buildType,而依赖库中却没有相应的自定义 buildType,则编译阶段就会报错。

一种解决方案是在子模块里也定义 app 中的所有 buildType,当然,项目里依赖多的同学肯定要吐槽了:我懒!不想修改辣么多东西! 
这里 Gradle 也提供了比 2.x 时代更智能的兼容方案:matchingFallbacks

在 buildTypes 中定义 matchingFallbacks,可以指定在子模块中没找到对应的构建类型时要加载哪个类型

//app 模块下的 build.gradle 中
buildTypes {
    debug {
        buildConfigField "String", "BASE_URL", "\"http://debug.api/\""
    }

    release {
        buildConfigField "String", "BASE_URL", "\"https://release.api/\""        
    }

    pre.initWith(release) 
    pre {
        buildConfigField "String", "BASE_URL", "\"https://pre.api/\""  
        matchingFallbacks = [''pre'', ''debug'', ''release'']
    }
}

matchingFallbacks 可以定义多个构建类型,当执行 gradle assemblePre 构建 Pre 版本时,而恰巧某个子模块又没有定义 pre 版本,则会一一按照你指定的 matchingFallbacks 从前往后依次寻找,直到类型匹配。这种匹配方案比 Gradle 2.x 时代默认为你构建 release 版本要智能的多,至少我们还可以根据变量来在构建不同类型时定义不同的匹配顺序。并且我们也可以抛弃掉前文提到的 defaultPublishConfig 配置了,因为 Gradle 3.x 中,只要 gradle 构建时,子模块的构建类型变成了与 app 构建类型一致了(前提是子模块中也定义了该类型),变得更加灵活。

技术终归是在向前发展的。关于自定义 BuildType 的一些使用小贴士就是这些了,至于更多的关于构建类型相关的知识,例如 buildTypes 结合 productFlavors,或是定义 sourceSets 属性指定不同的代码目录、资源文件目录等知识以后有机会再开一篇聊吧(又挖坑 2333)。

啰嗦了一堆,权且算是抛砖引玉。吼啦,下篇博客见~

版权声明:转载请注明本文出自扬州慢的 android 的博客(http://blog.csdn.net/yazhi1992),谢谢支持!

android.support.v4.app.NotificationBuilderWithBuilderAccessor的实例源码

android.support.v4.app.NotificationBuilderWithBuilderAccessor的实例源码

项目:MyCTFWriteUps    文件:NotificationCompat.java   
private static void addMediaStyletoBuilderLollipop(NotificationBuilderWithBuilderAccessor notificationbuilderwithbuilderaccessor,android.support.v4.app.Style style)
{
    if (style instanceof MediaStyle)
    {
        style = (MediaStyle)style;
        int ai[] = ((MediaStyle) (style)).mActionsToShowInCompact;
        if (((MediaStyle) (style)).mToken != null)
        {
            style = ((android.support.v4.app.Style) (((MediaStyle) (style)).mToken.getToken()));
        } else
        {
            style = null;
        }
        NotificationCompatImpl21.addMediaStyle(notificationbuilderwithbuilderaccessor,ai,style);
    }
}
项目:boohee_v5.6    文件:NotificationCompatImpl21.java   
public static void addMediaStyle(NotificationBuilderWithBuilderAccessor b,int[] actionsToShowInCompact,Object token) {
    MediaStyle style = new MediaStyle(b.getBuilder());
    if (actionsToShowInCompact != null) {
        style.setShowActionsInCompactView(actionsToShowInCompact);
    }
    if (token != null) {
        style.setMediaSession((Token) token);
    }
}
项目:MyCTFWriteUps    文件:NotificationCompat.java   
public Notification build(android.support.v4.app.Builder builder,NotificationBuilderWithBuilderAccessor notificationbuilderwithbuilderaccessor)
{
    NotificationCompat.addMediaStyletoBuilderIcs(notificationbuilderwithbuilderaccessor,builder);
    notificationbuilderwithbuilderaccessor = notificationbuilderwithbuilderaccessor.build();
    NotificationCompat.addBigMediaStyletoBuilderJellybean(notificationbuilderwithbuilderaccessor,builder);
    return notificationbuilderwithbuilderaccessor;
}
项目:MyCTFWriteUps    文件:NotificationCompat.java   
private static void addMediaStyletoBuilderIcs(NotificationBuilderWithBuilderAccessor notificationbuilderwithbuilderaccessor,android.support.v4.app.Builder builder)
{
    if (builder.mStyle instanceof MediaStyle)
    {
        MediaStyle mediastyle = (MediaStyle)builder.mStyle;
        NotificationCompatImplBase.overrideContentView(notificationbuilderwithbuilderaccessor,builder.mContext,builder.mContentTitle,builder.mContentText,builder.mContentInfo,builder.mNumber,builder.mLargeIcon,builder.mSubText,builder.mUseChronometer,builder.mNotification.when,builder.mActions,mediastyle.mActionsToShowInCompact,mediastyle.mShowCancelButton,mediastyle.mCancelButtonIntent);
    }
}
项目:MyCTFWriteUps    文件:NotificationCompatImpl21.java   
public static void addMediaStyle(NotificationBuilderWithBuilderAccessor notificationbuilderwithbuilderaccessor,int ai[],Object obj)
{
    notificationbuilderwithbuilderaccessor = new android.app.Notification.MediaStyle(notificationbuilderwithbuilderaccessor.getBuilder());
    if (ai != null)
    {
        notificationbuilderwithbuilderaccessor.setShowActionsInCompactView(ai);
    }
    if (obj != null)
    {
        notificationbuilderwithbuilderaccessor.setMediaSession((android.media.session.MediaSession.Token)obj);
    }
}
项目:MyCTFWriteUps    文件:NotificationCompatImplBase.java   
public static void overrideContentView(NotificationBuilderWithBuilderAccessor notificationbuilderwithbuilderaccessor,Context context,CharSequence charsequence,CharSequence charsequence1,CharSequence charsequence2,int i,Bitmap bitmap,CharSequence charsequence3,boolean flag,long l,List list,boolean flag1,PendingIntent pendingintent)
{
    context = generateContentView(context,charsequence,charsequence1,charsequence2,i,bitmap,charsequence3,flag,l,list,flag1,pendingintent);
    notificationbuilderwithbuilderaccessor.getBuilder().setContent(context);
    if (flag1)
    {
        notificationbuilderwithbuilderaccessor.getBuilder().setongoing(true);
    }
}
项目:boohee_v5.6    文件:NotificationCompat.java   
public Notification build(android.support.v4.app.NotificationCompat.Builder b,NotificationBuilderWithBuilderAccessor builder) {
    NotificationCompat.addMediaStyletoBuilderIcs(builder,b);
    return builder.build();
}
项目:boohee_v5.6    文件:NotificationCompat.java   
public Notification build(android.support.v4.app.NotificationCompat.Builder b,b);
    Notification n = builder.build();
    NotificationCompat.addBigMediaStyletoBuilderJellybean(n,b);
    return n;
}
项目:boohee_v5.6    文件:NotificationCompat.java   
public Notification build(android.support.v4.app.NotificationCompat.Builder b,NotificationBuilderWithBuilderAccessor builder) {
    NotificationCompat.addMediaStyletoBuilderLollipop(builder,b.mStyle);
    return builder.build();
}
项目:boohee_v5.6    文件:NotificationCompat.java   
private static void addMediaStyletoBuilderLollipop(NotificationBuilderWithBuilderAccessor builder,Style style) {
    if (style instanceof MediaStyle) {
        MediaStyle mediaStyle = (MediaStyle) style;
        NotificationCompatImpl21.addMediaStyle(builder,mediaStyle.mActionsToShowInCompact,mediaStyle.mToken != null ? mediaStyle.mToken.getToken() : null);
    }
}
项目:boohee_v5.6    文件:NotificationCompat.java   
private static void addMediaStyletoBuilderIcs(NotificationBuilderWithBuilderAccessor builder,android.support.v4.app.NotificationCompat.Builder b) {
    if (b.mStyle instanceof MediaStyle) {
        MediaStyle mediaStyle = b.mStyle;
        NotificationCompatImplBase.overrideContentView(builder,b.mContext,b.mContentTitle,b.mContentText,b.mContentInfo,b.mNumber,b.mLargeIcon,b.mSubText,b.mUseChronometer,b.mNotification.when,b.mActions,mediaStyle.mShowCancelButton,mediaStyle.mCancelButtonIntent);
    }
}
项目:boohee_v5.6    文件:NotificationCompatImplBase.java   
public static <T extends Action> void overrideContentView(NotificationBuilderWithBuilderAccessor builder,CharSequence contentTitle,CharSequence contentText,CharSequence contentInfo,int number,Bitmap largeIcon,CharSequence subText,boolean useChronometer,long when,List<T> actions,boolean showCancelButton,PendingIntent cancelButtonIntent) {
    builder.getBuilder().setContent(generateContentView(context,contentTitle,contentText,contentInfo,number,largeIcon,subText,useChronometer,when,actions,actionsToShowInCompact,showCancelButton,cancelButtonIntent));
    if (showCancelButton) {
        builder.getBuilder().setongoing(true);
    }
}
项目:MyCTFWriteUps    文件:NotificationCompat.java   
public Notification build(android.support.v4.app.Builder builder,builder);
    return notificationbuilderwithbuilderaccessor.build();
}
项目:MyCTFWriteUps    文件:NotificationCompat.java   
public Notification build(android.support.v4.app.Builder builder,NotificationBuilderWithBuilderAccessor notificationbuilderwithbuilderaccessor)
{
    NotificationCompat.addMediaStyletoBuilderLollipop(notificationbuilderwithbuilderaccessor,builder.mStyle);
    return notificationbuilderwithbuilderaccessor.build();
}

Android配置build.gradle的buildTypes动态自动维护debug和release包自定义字段变量值

Android配置build.gradle的buildTypes动态自动维护debug和release包自定义字段变量值

Android配置build.gradle的buildTypes动态自动维护debug和release包自定义字段变量值
在Android编译出包阶段,debug包和正式的release有时候需要作出有所区别的调整。
比如最常见的是App应用程序中Log日志输出开关的控制。开发者希望在debug阶段Log日志能够打开输出,以便排查定位问题,而在正式的release包中,为了避免泄露App应用程序内部的信息而需要把Log日志输出关闭掉,这通常需要依赖于BuildConfig里面Android系统定义的静态变量值DEBUG,DEBUG是一个Android系统预先为开发者准备的布尔值,当在debug阶段,这个值为true,当在打出的release包时候,这个值为false。
现在如果单单一个BuildConfig.DEBUG值不能满足开发者需求,假如开发者需要自定义更多的类似于BuildConfig.DEBUG这样的值,在debug阶段和release阶段自动动态维护和管理不同的值,以提供给App应用程序中的代码使用,那么可以通过配置build.gradle的buildTypes实现,例如这样配置buildTypes:

apply plugin: ''com.android.application''
 
android {
    .......
 
    buildTypes {
        debug {
            buildConfigField "String", "MyAppType", ''"debug"''
            buildConfigField "String", "MyName", ''"zhang"''
            buildConfigField "boolean", "MyLOG_DEBUG", "true"
            buildConfigField "int", "MyNumber", "2018"
        }
 
        release {
            buildConfigField "String", "MyAppType", ''"release"''
            buildConfigField "String", "MyName", ''"phil"''
            buildConfigField "boolean", "MyLOG_DEBUG", "false"
            buildConfigField "int", "MyNumber", "2019"
        }
 
        ......
    }
 
   ......
}

buildTypes里面定义了四个值:MyAppType(字符串String类型),MyName(字符串String类型),MyLOG_DEBUG(布尔值boolean类型),MyNumber(整数int类型)。
定义的类型当然不限于以上几种,开发者根据需要可以定义更多复杂类型。定义的格式为:

字段变量类型,字段变量名,具体的值

定义好后,Android Studio自动的在BuildConfig里面产生:


后面如果包是debug模式,那么字段变量和值的对应情况为:
"MyAppType", ''"debug"''
"MyName", ''"zhang"''
"MyLOG_DEBUG", "true"
"MyNumber", "2018"

如果是在release模式下的包,对应的值情况:
"MyAppType", ''"release"''
"MyName", ''"phil"''
"MyLOG_DEBUG", "false"
"MyNumber", "2019"

在上层Java代码中直接通过BuildConfig使用之:


--------------------- 
作者:zhangphil 
来源:CSDN 
原文:https://blog.csdn.net/zhangphil/article/details/84834014 
版权声明:本文为博主原创文章,转载请附上博文链接!

我们今天的关于在DTColumnBuilder renderwidth上包含自定义指令dt.columns.add的分享就到这里,谢谢您的阅读,如果想了解更多关于android – Cordova Build失败,未指定buildToolsVersion、Android 自定义构建类型 BuildType、android.support.v4.app.NotificationBuilderWithBuilderAccessor的实例源码、Android配置build.gradle的buildTypes动态自动维护debug和release包自定义字段变量值的相关信息,可以在本站进行搜索。

本文标签: