如果您想了解重复的zip条目[classes.jar:android/support/v4/app/INotificationSideChannel$Stub$Proxy.class]的相关知识,那么
如果您想了解重复的zip条目[classes.jar:android / support / v4 / app / INotificationSideChannel $ Stub $ Proxy.class]的相关知识,那么本文是一篇不可错过的文章,我们将为您提供关于"Class does not support Automation or does not support expected interface" 数据库连接错误问题分析与解决、@SpringBootTest(classes = SomeController.class) 和 @WebMvcTest(SomeController.class) 的区别、actionbarsherlock – Android Studio和ProGuard – 无法写入资源[META-INF / MANIFEST.MF](重复的zip条目[volley.jar:META-INF / MANIFEST.MF])、Android AIDL proxy/stub 分析的有价值的信息。
本文目录一览:- 重复的zip条目[classes.jar:android / support / v4 / app / INotificationSideChannel $ Stub $ Proxy.class]
- "Class does not support Automation or does not support expected interface" 数据库连接错误问题分析与解决
- @SpringBootTest(classes = SomeController.class) 和 @WebMvcTest(SomeController.class) 的区别
- actionbarsherlock – Android Studio和ProGuard – 无法写入资源[META-INF / MANIFEST.MF](重复的zip条目[volley.jar:META-INF / MANIFEST.MF])
- Android AIDL proxy/stub 分析
重复的zip条目[classes.jar:android / support / v4 / app / INotificationSideChannel $ Stub $ Proxy.class]
如何解决重复的zip条目[classes.jar:android / support / v4 / app / INotificationSideChannel $ Stub $ Proxy.class]?
在Android项目中使用react-native 0.55.3进行工作,在构建或发布项目后,我得到重复类的消息:
警告:处理任务java.io.IO时发生异常:无法编写[/home/hamed/src/DigitalPos/digitalpos/android/app/build/intermediates/transforms/proguard/release/0.jar](无法读取[/root/.gradle/caches/transforms-1/files-1.1/core-1.0.0.aar/aaf85f5113156ead949fc46be782001c/jars/classes.jar(;;;;;;**.class)](重复的zip条目[classes.jar:android / support / v4 / app / INotificationSideChannel $ Stub $ Proxy.class])) 线程(任务限制器_2):销毁 :app:transformClassesAndResourcesWithProguardForRelease(线程['','',5,main]的任务处理程序)已完成。花了14.201秒。
这是我的应用程序级别build.gradle(moduale:app)配置:
apply plugin: "com.android.application"
import com.android.build.OutputFile
project.ext.react = [
entryFile: "index.js"
]
apply from: "../../node_modules/react-native/react.gradle"
/**
* Set this to true to create two separate APKs instead of one:
* - An APK that only works on ARM devices
* - An APK that only works on x86 devices
* The advantage is the size of the APK is reduced by about 4MB.
* Upload all the APKs to the Play Store and people will download
* the correct one based on the cpu architecture of their device.
*/
def enableSeparateBuildPercpuArchitecture = false
/**
* Run Proguard to shrink the Java bytecode in release builds.
*/
def enableProguardInReleaseBuilds = true
android {
compileSdkVersion 28
buildToolsversion "27.0.3"
defaultConfig {
applicationId "com.digitalpos"
minSdkVersion 16
targetSdkVersion 27
versionCode 2
versionName "2.2.0.5"
setProperty("archivesBaseName",applicationId + "-v" + versionCode + "(" + versionName + ")")
vectorDrawables.useSupportLibrary = true
ndk {
abiFilters "armeabi-v7a","x86"
}
multiDexEnabled true
}
splits {
abi {
reset()
enable enableSeparateBuildPercpuArchitecture
universalApk false // If true,also generate a universal APK
include "armeabi-v7a","x86"
}
}
signingConfigs {
release {
if (project.hasProperty(''MYAPP_RELEASE_STORE_FILE'')) {
storeFile file(MYAPP_RELEASE_STORE_FILE)
storePassword MYAPP_RELEASE_STORE_PASSWORD
keyAlias MYAPP_RELEASE_KEY_ALIAS
keyPassword MYAPP_RELEASE_KEY_PASSWORD
}
}
}
buildTypes {
release {
minifyEnabled enableProguardInReleaseBuilds
useProguard enableProguardInReleaseBuilds
zipAlignEnabled enableProguardInReleaseBuilds
debuggable false
shrinkResources enableProguardInReleaseBuilds
proguardFiles getDefaultProguardFile("proguard-android.txt"),"proguard-rules.pro"
signingConfig signingConfigs.release
}
debug{
minifyEnabled enableProguardInReleaseBuilds
useProguard enableProguardInReleaseBuilds
zipAlignEnabled enableProguardInReleaseBuilds
proguardFiles getDefaultProguardFile("proguard-android.txt"),"proguard-rules.pro"
}
}
// applicationVariants are e.g. debug,release
applicationVariants.all { variant ->
variant.outputs.each { output ->
// For each separate APK per architecture,set a unique version code as described here:
// http://tools.android.com/tech-docs/new-build-system/user-guide/apk-splits
def versionCodes = ["armeabi-v7a": 1,"x86": 2]
def abi = output.getFilter(OutputFile.ABI)
if (abi != null) { // null for the universal-debug,universal-release variants
output.versionCodeOverride =
versionCodes.get(abi) * 1048576 + defaultConfig.versionCode
}
}
}
packagingOptions {
exclude ''meta-inf/DEPENDENCIES''
exclude ''meta-inf/LICENSE''
exclude ''meta-inf/LICENSE.txt''
exclude ''meta-inf/license.txt''
exclude ''meta-inf/NOTICE''
exclude ''meta-inf/NOTICE.txt''
exclude ''meta-inf/notice.txt''
exclude ''meta-inf/ASL2.0''
exclude("meta-inf/*.kotlin_module")
exclude("meta-inf/androidx.localbroadcastmanager_localbroadcastmanager.version")
exclude("meta-inf/proguard/coroutines.pro")
exclude ("meta-inf/proguard/androidx-annotations.pro")
exclude ''meta-inf/androidx.customview_customview.version''
exclude ''meta-inf/androidx.legacy_legacy-support-core-ui.version''
exclude ''meta-inf/androidx.drawerlayout_drawerlayout.version''
exclude ''meta-inf/androidx.interpolator_interpolator.version''
exclude ''meta-inf/androidx.legacy_legacy-support-core-utils.version''
exclude ''meta-inf/androidx.slidingpanelayout_slidingpanelayout.version''
exclude ''meta-inf/androidx.swiperefreshlayout_swiperefreshlayout.version''
exclude ''meta-inf/androidx.print_print.version''
exclude ''meta-inf/androidx.documentfile_documentfile.version''
exclude ''meta-inf/androidx.*.version''
}
dexOptions {
javaMaxHeapSize "2g"
}
}
dependencies {
implementation ''com.scottyab:rootbeer-lib:0.0.7''
compile project('':react-native-file-viewer'')
compile project('':react-native-html-to-pdf'')
compile project('':react-native-fs'')
compile project('':react-native-image-crop-picker'')
compile project('':react-native-image-picker'')
compile project('':react-native-wheel-picker'')
compile project('':react-native-vector-icons'')
compile project('':react-native-uuid-generator'')
compile project('':react-native-svg'')
compile project('':react-native-smart-barcode'')
compile project('':react-native-restart'')
compile project('':react-native-linear-gradient'')
compile project('':react-native-image-base64'')
compile project('':react-native-i18n'')
compile (project('':react-native-camera'')) {
exclude group: "com.google.android.gms"
compile (''com.android.support:support-v4:26.1.0''){
force=true
}
compile ''com.android.support:exifinterface:27.1.1''
compile (''com.google.android.gms:play-services-vision:18.0.0'') {
force = true
}
}
compile (project('':react-native-signature-capture'')){
compile (''com.android.support:appcompat-v7:23.0.0''){
force = true
}
}
compile (project('':react-native-smart-barcode'')){
compile (''com.android.support:appcompat-v7:23.4.0''){
force=true
}
}
implementation ''com.android.support.constraint:constraint-layout:1.1.2''
compile filetree(include: [''*.jar''],dir: ''libs'')
compile ''com.facebook.react:react-native:0.55.3''
// From node_modules
}
task copyDownloadableDepsToLibs(type: copy) {
from configurations.compile
into ''libs''
}
preBuild.doFirst {
ant.replaceregexp(match:''androidx.core.content.'',replace:''android.support.v4.content.'',flags:''g'',byline:true) {
fileset(dir: ''../../node_modules/react-native-file-
viewer/android/src/main/java/com/vinzscam/reactnativefileviewer'',includes: ''*.java'')
}
}
这是我的应用程序级别build.gradle(模块:我的项目名称)配置:
// Top-level build file where you can add configuration options common to all sub-
projects/modules.
buildscript {
repositories {
// jcenter()
jcenter {
url "https://jcenter.bintray.com/"
}
google()
maven { url ''https://repo1.maven.org/maven2'' }
maven {
url ''https://maven.google.com''
}
maven { url "https://jitpack.io" }
maven { url ''https://maven.fabric.io/public'' }
mavenCentral()
}
dependencies {
// classpath ''com.android.tools.build:gradle:3.1.3''
classpath ''com.android.tools.build:gradle:3.1.3''
// classpath ''com.android.tools.build:gradle:3.5.1''
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
google()
// jcenter()
jcenter {
url "https://jcenter.bintray.com/"
}
maven { url ''https://repo1.maven.org/maven2'' }
maven { url "https://jitpack.io" }
maven { url "https://maven.google.com" }
mavenCentral()
mavenLocal()
maven {
// All of React Native (JS,Obj-C sources,Android binaries) is installed from npm
url "$rootDir/../node_modules/react-native/android"
}
// jitpack repo is necessary to fetch ucrop dependency
}
configurations.all {
resolutionStrategy{
force ''com.android.support:support-v4:26.1.0''
force ''com.facebook.react:react-native:0.55.3''
force ''com.android.support:appcompat-v7:28.0.0''
// force ''com.android.support:appcompat-v7:23.0.0''
force ''com.android.support:support-annotations:26.1.0''
force ''com.squareup.okhttp3:okhttp:3.6.0''
force ''com.madgag.spongycastle:prov:1.54.0.0''
force ''com.madgag.spongycastle:core:1.54.0.0''
force ''com.google.zxing:core:3.2.1''
force ''com.google.android.gms:play-services-vision-common:18.0.0''
force ''com.android.support:exifinterface:26.1.0''
}
}
}
subprojects {
if (project.name.contains(''react-native-vector-icons'')
) {
buildscript {
repositories {
google()
// jcenter()
jcenter {
url "https://jcenter.bintray.com/"
}
maven { url "https://dl.bintray.com/android/android-tools/" }
maven { url ''https://repo1.maven.org/maven2'' }
}
}
}else if (
project.name.contains(''react-native-camera'')
) {
buildscript {
repositories {
google()
maven { url "https://jitpack.io"
}
maven {
url ''https://maven.google.com''
}
maven { url ''https://repo1.maven.org/maven2'' }
// jcenter()
jcenter {
url "https://jcenter.bintray.com/"
}
maven { url "https://dl.bintray.com/android/android-tools/" }
}
}
}else {
buildscript {
repositories {
google()
maven { url "https://jitpack.io"
}
maven {
url ''https://maven.google.com''
}
// jcenter()
jcenter {
url "https://jcenter.bintray.com/"
}
maven { url "https://dl.bintray.com/android/android-tools/" }
}
}
}
}
ext {
compileSdkVersion = 26
targetSdkVersion = 26
minSdkVersion=16
buildToolsversion = "26.0.2"
googlePlayServicesversion = "12.0.1"
supportLibVersion = "26.1.0"
}
在我的gradle.properties中设置:
android.useDeprecatedndk=true
MYAPP_RELEASE_STORE_FILE=my-release-key.keystore
MYAPP_RELEASE_KEY_ALIAS=my-key-alias
MYAPP_RELEASE_STORE_PASSWORD=*
MYAPP_RELEASE_KEY_PASSWORD=*
android.enableAapt2=false
android.useandroidX = true
android.enableJetifier = true
这是proguard-rules.pro:
-assumenosideeffects class android.util.Log {
public static *** d(...);
public static *** v(...);
public static *** i(...);
public static *** w(...);
public static *** e(...);
}
# React Native
-keep,allowobfuscation @interface com.facebook.proguard.annotations.DoNotStrip
-keep,allowobfuscation @interface com.facebook.proguard.annotations.KeepGettersAndSetters
-keep,allowobfuscation @interface com.facebook.common.internal.DoNotStrip
# Do not strip any method/class that is annotated with @DoNotStrip
-keep @com.facebook.proguard.annotations.DoNotStrip class *
-keep @com.facebook.common.internal.DoNotStrip class *
-keepclassmembers class * {
@com.facebook.proguard.annotations.DoNotStrip *;
@com.facebook.common.internal.DoNotStrip *;
}
-keepclassmembers @com.facebook.proguard.annotations.KeepGettersAndSetters class * {
void set*(***);
*** get*();
}
-keep class * extends com.facebook.react.bridge.JavaScriptModule { *; }
-keep class * extends com.facebook.react.bridge.NativeModule { *; }
-keepclassmembers,includedescriptorclasses class * { native <methods>; }
-keepclassmembers class * { @com.facebook.react.uimanager.UIProp <fields>; }
-keepclassmembers class * { @com.facebook.react.uimanager.annotations.ReactProp <methods>; }
-keepclassmembers class * { @com.facebook.react.uimanager.annotations.ReactPropGroup <methods>; }
-dontwarn com.facebook.react.**
-keep,includedescriptorclasses class com.facebook.react.bridge.** { *; }
# hermes
-keep class com.facebook.jni.** { *; }
# TextLayoutBuilder uses a non-public Android constructor within StaticLayout.
# See libs/proxy/src/main/java/com/facebook/fbui/textlayoutbuilder/proxy for details.
-dontwarn android.text.StaticLayout
# okhttp
-keepattributes Signature
-keepattributes *Annotation*
-keep class okhttp3.** { *; }
-keep interface okhttp3.** { *; }
-dontwarn okhttp3.**
# okio
-keep class sun.misc.Unsafe { *; }
-dontwarn java.nio.file.*
-dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement
-dontwarn okio.**
# minifyEnabled true
-ignorewarnings
# Uncomment this to preserve the line number information for
# debugging stack traces.
-keepattributes SourceFile,LineNumberTable
# If you keep the line number information,uncomment this to
# hide the original source file name.
-renamesourcefileattribute SourceFile
-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontskipnonpubliclibraryclassmembers
-dontpreverify
-verbose
-optimizations !code/simplification/arithmetic,!field/,!class/merging/,!code/allocation/variable
-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep class android.support.** { *; }
#React native
-keep class com.facebook.react.devsupport.** { *; }
-dontwarn com.facebook.react.devsupport.**
-dontwarn com.
#-keep class com.facebook.react.cxxbridge.ModuleRegistryHolder { *; }
#-keep class com.facebook.react.cxxbridge.CatalystInstanceImpl { *; }
#-keep class com.facebook.react.cxxbridge.JavaScriptExecutor { *; }
-keep class com.facebook.react.bridge.queue.NativeRunnable { *; }
-keep class com.facebook.react.bridge.ExecutorToken { *; }
-keep class com.facebook.react.bridge.ReadableType { *; }
-keep,allowobfuscation @interface com.facebook.common.internal.DoNotStrip
-keep,allowobfuscation @interface com.facebook.jni.annotations.DoNotStrip
# Do not strip any method/class that is annotated with @DoNotStrip
-keep @com.facebook.proguard.annotations.DoNotStrip class *
-keep @com.facebook.common.internal.DoNotStrip class *
-keep @com.facebook.jni.annotations.DoNotStrip class *
-keepclassmembers class * {
@com.facebook.proguard.annotations.DoNotStrip *;
@com.facebook.common.internal.DoNotStrip *;
@com.facebook.jni.annotations.DoNotStrip *;
}
-keepclassmembers @com.facebook.proguard.annotations.KeepGettersAndSetters class * {
void set*(***);
*** get*();
}
-keep class * implements com.facebook.react.bridge.JavaScriptModule { *; }
-keep class * implements com.facebook.react.bridge.NativeModule { *; }
-keep class * extends com.facebook.react.bridge.JavaScriptModule { *; }
-keep class * extends com.facebook.react.bridge.NativeModule { *; }
-keepclassmembers,includedescriptorclasses class * { native <methods>; }
-keepclassmembers class * { @com.facebook.react.uimanager.UIProp <fields>; }
-keepclassmembers class * { @com.facebook.react.uimanager.annotations.ReactProp <methods>; }
-keepclassmembers class * { @com.facebook.react.uimanager.annotations.ReactPropGroup <methods>; }
##########################################################################
-dontwarn javax.annotation.**
-dontwarn android.app.**
-dontwarn android.support.**
-dontwarn android.view.**
-dontwarn android.widget.**
-dontwarn com.google.common.primitives.**
-dontwarn **CompatHoneycomb
-dontwarn **CompatHoneycombMR2
-dontwarn **CompatCreatorHoneycombMR2
-keepclasseswithmembernames class * {
native <methods>;
}
-keepclasseswithmembers class * {
public <init>(android.content.Context,android.util.AttributeSet);
}
-keepclasseswithmembers class * {
public <init>(android.content.Context,android.util.AttributeSet,int);
}
-keepclassmembers class * extends android.app.Activity {
public void *(android.view.View);
}
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
-keep class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator *;
}
-keepclassmembers class *.R$ {
public static <fields>;
}
-keep public class net.sqlcipher.** {
*;
}
-keep public class net.sqlcipher.database.** {
*;
}
如何避免React本机项目中包含的重复类?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)
"Class does not support Automation or does not support expected interface" 数据库连接错误问题分析与解决
1,故障现象
本人编译的英文版程序在本机上运行 OK,换台电脑运行,发现启动时连接数据库出错。
错误信息如下:
---------------------------
Error start database
---------------------------
database testing error, error description as
Class does not support Automation or does not support expected interface
2,问题分析
https://blog.csdn.net/woolnil/article/details/7980534
https://blog.csdn.net/chaoguodong/article/details/38442527
http://www.bkill.com/download/175356.html
以上文章,特别是最后一篇,指出,
- 在 Windows 7 和早期版本的 Windows 中,_Connection IID 是 00000550-0000-0010-8000-00AA006D2EA4。
- 在 Windows 7 SP1 中,_Connection IID 是 00001550-0000-0010-8000-00AA006D2EA4,并且_Connection_Deprecated 的 IID 是 00000550-0000-0010-8000-00AA006D2EA4。
如果您的应用程序使用_Connection 的早期绑定,则在编译期间新的 IID 将存储在应用程序二进制文件中。当应用程序在下层操作系统上运行时,这会导致错误,因为 IID 不存在。
一些 ADO API 在 ADO 2.7 和更高版本中依赖于平台。在 64 位版本的 Windows 上,这些 ADO API 通过使用 64 位数据类型(例如 LONGLONG 数据类型)来处理参数。但是,使用这些 API 的应用程序仍使用 LONG 数据类型。因此,当您尝试运行宏时收到 “类型不匹配” 错误消息。
在本人电脑中查询,结果符合第 2 条。
在故障电脑中查询,结果符合第 1 条。
注册项 “00001550-0000-0010-8000-00AA006D2EA4” 不存在
ADO 注册项值为 “00000550-0000-0010-8000-00AA006D2EA4”,与 win7 SP1 不一致。
3,解决方案
https://blog.csdn.net/woolnil/article/details/7980534
上文给出的解决办法有:
1、所有客户端安装 KB983246 补丁!
2、卸载 Win7 的 SP1 补丁包
3、替换 Win7 的 C:\Program Files\Common Files\System\ado 下的对应 ado 组件为 XP SP3 下的对应文件。
为简单起见,采取方案 3.
如上图,在开发环境打开工程,查看引用文件。发现工程使用了 ADO2.8 控件,文件位于 C:\Program Files (x86)\Common Files\System\ado\msado28.tlb
将原来的 msado28.tlb 改名为 msado28-new.tlb
然后将旧版 XP 的 msado28.tlb 复制到 ado 目录。
打开 VB 开发环境:
è 重新添加一遍 ADO 控件。作用是更新 IID 接口。
è 重新编译程序。
注意:Win7 的 ado 文件夹要先设置权限,否则其中的文件无法更改。
4,测试
在本机运行,正常。
在目标电脑运行,正常。
5,总结
本问题牵涉到操作系统版本、SP 补丁、KB 补丁、32 位 / 64 位系统等诸多因素。
编译环境应配置为兼容最低配置,即要兼容目标环境为 XP 系统、32 位、无补丁包。否则,可能出现系统组件的调用故障。
@SpringBootTest(classes = SomeController.class) 和 @WebMvcTest(SomeController.class) 的区别
如何解决@SpringBootTest(classes = SomeController.class) 和 @WebMvcTest(SomeController.class) 的区别
我知道使用 @Springboottest
我在测试期间提升了整个 spring 上下文,或者在我的情况下使用 @SpringBoottest(classes = SomeController.class)
我只提升了一个 bean -> SomeController。如果这个控制器有一些依赖,我需要模拟它们。使用注释 @WebMvcTest(SoneController.class)
我将(根据我的知识)实现相同的目标。
问题是:提供的示例中使用的这两个注释之间有什么区别吗?
解决方法
我认为只要阅读这两个注释的 Javadoc 就足以回答您的问题:
1. @WebMvcTest
可用于仅关注 Spring MVC 组件的 Spring MVC 测试的注解。
使用此注解将禁用完全自动配置,而是仅应用与 MVC 测试相关的配置(即 @Controller
、@ControllerAdvice
、@JsonComponent
、Converter/GenericConverter、Filter、WebMvcConfigurer 和 HandlerMethodArgumentResolver豆,但不是 @Component
、@Service
或 @Repository
豆)。
默认情况下,使用 @WebMvcTest
注释的测试还将自动配置 Spring Security 和 MockMvc(包括对 HtmlUnit WebClient 和 Selenium WebDriver 的支持)。为了对 MockMVC 进行更细粒度的控制,可以使用 @AutoConfigureMockMvc
注释。
@SpringbootTest
可以在运行基于 Spring Boot 的测试的测试类上指定的注解。在常规 Spring TestContext 框架之上提供以下功能:
当没有定义特定的 @ContextConfiguration(loader=...)
时,使用 SpringBootContextLoader 作为默认的 ContextLoader。 当未使用嵌套的 @Configuration
且未指定显式类时,自动搜索 @SpringBootConfiguration。 允许使用 properties 属性定义自定义环境属性。
允许使用 args 属性定义应用程序参数。 提供对不同 webEnvironment 模式的支持,包括启动完全运行的 web 服务器侦听定义或随机端口的能力。 注册 TestRestTemplate 和/或 WebTestClient bean,以用于使用完全运行的 Web 服务器的 Web 测试。
,@SpringBootTest(classes = SomeController.class)
和 @WebMvcTest(SomeController.class)
之间存在明显区别。
@SpringBootTest(classes = SomeController.class)
- 使用组件SomeController.class
启动服务器(例如 Tomcat)+ spring 应用程序上下文。除了控制器之外,您通常应该指定上下文配置以成功启动整个应用程序(例如:当您不指定classes
时,它会回退到@SpringBootApplication
)。@WebMvcTest(SomeController.class)
- 仅使用SomeController.class
启动应用程序的网络层。
有什么区别?
@SpringBootTest
测试通常是集成测试,您启动完整的 spring-boot 应用程序并针对该黑盒进行测试。您仍然可以通过在注释参数中提供配置、属性、Web 服务器类型等来调整应用程序启动。
但是 @WebMvcTest(SomeController.class)
通常是对控制器的单元测试。这些是轻量级和快速的。在此类测试中模拟 @Service
类等依赖项。
这是一个很好的起点 - https://spring.io/guides/gs/testing-web/
,这两种方式有几个细微的区别。
但是当你在spring boot context init过程中遇到bean初始化异常或者测试执行过程中出现NullPointerException
上升等问题时,你只会随机发现其中的一部分。
为了让事情更简单,专注于意图。
当你这样写时:
@SpringBootTest(classes = SomeController.class)
您将使 Spring 仅初始化 SomeController bean 实例。
测试控制器是否可取?
可能不需要,因为您需要一种使用控制器方法调用控制器的方法。
为此, MockMvc 实例会有所帮助。 使用 WebMvcTest,您可以在测试上下文中额外加载该 bean。
所以这种方式更可取:
@WebMvcTest(SomeController.class)
public class SomeControllerTest{
@Autowired
private MockMvc mvc;
...
}
当然,您可以使用 @SpringBootTest
和一些其他类获得类似的行为,但这只是开销:@WebMvcTest
专用注释就足够了。
最后为什么要让你的追随者更难阅读测试课程?
通过精心设计的使用 Spring Boot 测试注释的方法,很有可能实现这一目标。
actionbarsherlock – Android Studio和ProGuard – 无法写入资源[META-INF / MANIFEST.MF](重复的zip条目[volley.jar:META-INF / MANIFEST.MF])
夹:
android-support-v4.jar gson-2.2.4.jar libGoogleAnalyticsV2.jar volley.jar
我正在尝试使用Android Studio Build#AI-130.692269生成签名APK.我检查两个复选框“运行ProGuard”和“包含系统proguard文件”
我的ProGuard路径文件proguard-project.txt如下所示:
# To enable ProGuard in your project,edit project.properties # to define the proguard.config property as described in that file. # # Add project specific ProGuard rules here. # By default,the flags in this file are appended to flags specified # in ${sdk.dir}/tools/proguard/proguard-android.txt # You can edit the include path and order by changing the ProGuard # include property in project.properties. # # For more details,see # http://developer.android.com/guide/developing/tools/proguard.html # Add any project specific keep options here: # If your project uses WebView with JS,uncomment the following # and specify the fully qualified class name to the JavaScript interface # class: #-keepclassmembers class fqcn.of.javascript.interface.for.webview { # public *; #}
我编辑了project.properties,现在看起来像:
# This file is automatically generated by Android Tools. # Do not modify this file -- YOUR CHANGES WILL BE ERASED! # # This file must be checked in Version Control Systems. # # To customize properties used by the Ant build system edit # "ant.properties",and override values to adapt the script to your # project structure. # # To enable ProGuard to shrink and obfuscate your code,uncomment this (available properties: sdk.dir,user.home): #proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt proguard.config=/Applications/adt-bundle-mac-x86_64/sdk/tools/proguard/proguard-android.txt:proguard-project.txt # Project target. target=android-17 android.library=false android.library.reference.1=../AndroidBarSherlock/actionbarsherlock
这是我得到的输出:
information:ProGuard: [SocialPrice] ProGuard,version 4.7 information:ProGuard: [SocialPrice] Reading input... information:ProGuard: [SocialPrice] Reading program jar [/Users/sdelamo/Library/Caches/AndroidStudioPreview/compile-server/_temp_/proguard_input4364141808943557175.jar] information:ProGuard: [SocialPrice] Reading program jar [/Users/sdelamo/Documents/Developer/android/facebook-android-sdk-3.0.1/facebook/libs/android-support-v4.jar] information:ProGuard: [SocialPrice] Reading program jar [/Users/sdelamo/Documents/workspaceAndroid/SocialPrice/libs/volley.jar] information:ProGuard: [SocialPrice] Reading program jar [/Users/sdelamo/Documents/workspaceAndroid/SocialPrice/libs/libGoogleAnalyticsV2.jar] information:ProGuard: [SocialPrice] Reading program jar [/Users/sdelamo/Documents/workspaceAndroid/SocialPrice/libs/gson-2.2.4.jar] information:ProGuard: [SocialPrice] Reading library jar [/Applications/Android Studio.app/sdk/platforms/android-17/android.jar] information:ProGuard: [SocialPrice] Initializing... information:ProGuard: [SocialPrice] Note: com.google.analytics.tracking.android.AdHitIdGenerator: can''t find dynamically referenced class com.google.ads.AdRequest information:ProGuard: [SocialPrice] Note: com.google.gson.internal.UnsafeAllocator: can''t find dynamically referenced class sun.misc.Unsafe information:ProGuard: [SocialPrice] Note: the configuration refers to the unkNown class ''com.google.vending.licensing.ILicensingService'' information:ProGuard: [SocialPrice] Note: the configuration refers to the unkNown class ''com.android.vending.licensing.ILicensingService'' information:ProGuard: [SocialPrice] Note: there were 2 references to unkNown classes. information:ProGuard: [SocialPrice] You should check your configuration for typos. information:ProGuard: [SocialPrice] Note: there were 2 unresolved dynamic references to classes or interfaces. information:ProGuard: [SocialPrice] Ignoring unused library classes... information:ProGuard: [SocialPrice] Original number of library classes: 3259 information:ProGuard: [SocialPrice] Final number of library classes: 841 information:ProGuard: [SocialPrice] Printing kept classes,fields,and methods... information:ProGuard: [SocialPrice] Shrinking... information:ProGuard: [SocialPrice] Printing usage to [/Users/sdelamo/Documents/workspaceAndroid/SocialPrice/proguard_logs/usage.txt]... information:ProGuard: [SocialPrice] Removing unused program classes and class elements... information:ProGuard: [SocialPrice] Original number of program classes: 921 information:ProGuard: [SocialPrice] Final number of program classes: 579 information:ProGuard: [SocialPrice] Obfuscating... information:ProGuard: [SocialPrice] Printing mapping to [/Users/sdelamo/Documents/workspaceAndroid/SocialPrice/proguard_logs/mapping.txt]... information:ProGuard: [SocialPrice] Writing output... information:ProGuard: [SocialPrice] Preparing output jar [/Users/sdelamo/Library/Caches/AndroidStudioPreview/compile-server/socialprice_a27782ee/android/intermediate_artifacts/SocialPrice/obfuscated_sources.jar] information:ProGuard: [SocialPrice] copying resources from program jar [/Users/sdelamo/Library/Caches/AndroidStudioPreview/compile-server/_temp_/proguard_input4364141808943557175.jar] information:ProGuard: [SocialPrice] copying resources from program jar [/Users/sdelamo/Documents/Developer/android/facebook-android-sdk-3.0.1/facebook/libs/android-support-v4.jar] information:ProGuard: [SocialPrice] copying resources from program jar [/Users/sdelamo/Documents/workspaceAndroid/SocialPrice/libs/volley.jar] information:ProGuard: [SocialPrice] copying resources from program jar [/Users/sdelamo/Documents/workspaceAndroid/SocialPrice/libs/libGoogleAnalyticsV2.jar] information:ProGuard: [SocialPrice] copying resources from program jar [/Users/sdelamo/Documents/workspaceAndroid/SocialPrice/libs/gson-2.2.4.jar] information:ProGuard: [SocialPrice] Printing classes to [/Users/sdelamo/Documents/workspaceAndroid/SocialPrice/proguard_logs/dump.txt]... information:Compilation completed successfully with 4 warnings in 2 min 28 sec information:0 errors information:4 warnings Warning:ProGuard: [SocialPrice] You should check if you need to specify additional program jars. Warning:ProGuard: [SocialPrice] Warning: can''t write resource [meta-inf/MANIFEST.MF] (Duplicate zip entry [volley.jar:meta-inf/MANIFEST.MF]) Warning:ProGuard: [SocialPrice] Warning: can''t write resource [meta-inf/MANIFEST.MF] (Duplicate zip entry [libGoogleAnalyticsV2.jar:meta-inf/MANIFEST.MF]) Warning:ProGuard: [SocialPrice] Warning: can''t write resource [meta-inf/MANIFEST.MF] (Duplicate zip entry [gson-2.2.4.jar:meta-inf/MANIFEST.MF])
我是ProGuard的新手,所以欢迎任何反馈.
解决方法
通过增加
packagingOptions { exclude ''meta-inf/DEPENDENCIES'' exclude ''meta-inf/NOTICE'' exclude ''meta-inf/LICENSE'' exclude ''meta-inf/LICENSE.txt'' exclude ''meta-inf/NOTICE.txt'' }
到build.gradle中的android部分,错误消失了.
找到了解决方案
Duplicate files copied (Android Studio 0.4.0)
Android AIDL proxy/stub 分析
AIDL 的作用
由于每个应用程序都运行在自己的进程空间,并且可以从应用程序 UI 运行另一个服务进程,而且经常会在不同的进程间传递对象。在 Android 平台,一个进程通常不能访问另一个进程的内存空间,所以要想对话,需要将对象分解成操作系统可以理解的基本单元,并且有序的通过进程边界。
通过代码来实现这个数据传输过程是冗长乏味的,Android 提供了 AIDL 工具来处理这项工作。
AIDL (Android Interface Definition Language) 是一种 IDL 语言,用于生成可以在 Android 设备上两个进程之间进行进程间通信 (interprocess communication, IPC) 的代码。如果在一个进程中(例如 Activity)要调用另一个进程中(例如 Service)对象的操作,就可以使用 AIDL 生成可序列化的参数。
AIDL IPC 机制是面向接口的,像 COM 或 Corba 一样,但是更加轻量级。它是使用代理类在客户端和实现端传递数据。
先介绍一下 COM 的一个概念 ---------Proxy/Stub 结构(代理 / 存根结构)
打个比方,你到自动取款机上去取款;你就是客户,取款机就是你的代理;你不会在乎钱具体放在那里,你只想看到足够或更多的钱从出口出来(这就是 com 的透明性)。你同银行之间的操作完全是取款机代理实现。你的取款请求通过取款机,传到另一头,银行的服务器,他也没有必要知道你在哪儿取钱,他所关心的是你的身份,和你取款多少。当他确认你的权限,就进行相应的操作,返回操作结果给取款机,取款机根据服务器返回结果,从保险柜里取出相应数量的钱给你。你取出卡后,操作完成。取款机不是直接同服务器连接的,他们之间还有一个 “存根”,取款机与存根通信,服务器与存根通信。从某种意义上说存根就是服务器的代理。(参考 COM 代理与存根)
AIDLFramework 层的架构,如下图:
换而言之,Android 就是在传统的 C/S 架构中加入了一层,实现 IPC。图中表明,AIDL 类似 COM 的 Proxy/Stub 架构。不过是现在 android 自己的序列化类 Pacel。
今天关于重复的zip条目[classes.jar:android / support / v4 / app / INotificationSideChannel $ Stub $ Proxy.class]的分享就到这里,希望大家有所收获,若想了解更多关于"Class does not support Automation or does not support expected interface" 数据库连接错误问题分析与解决、@SpringBootTest(classes = SomeController.class) 和 @WebMvcTest(SomeController.class) 的区别、actionbarsherlock – Android Studio和ProGuard – 无法写入资源[META-INF / MANIFEST.MF](重复的zip条目[volley.jar:META-INF / MANIFEST.MF])、Android AIDL proxy/stub 分析等相关知识,可以在本站进行查询。
本文标签: