Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

bump project up to android SDK version 30 #158

Merged
merged 2 commits into from
Sep 16, 2020
Merged

bump project up to android SDK version 30 #158

merged 2 commits into from
Sep 16, 2020

Conversation

rasprague
Copy link
Collaborator

@rasprague rasprague commented Sep 14, 2020

bump project up to android SDK version 30

closes #154

bump project up to android SDK version 30
@rasprague rasprague requested a review from Apisov September 14, 2020 22:51
@rasprague
Copy link
Collaborator Author

rasprague commented Sep 14, 2020

ran the apk through veridex tool, for reference here's the summary:

84 hidden API(s) used: 32 linked against, 52 through reflection
62 in greylist
0 in blacklist
13 in greylist-max-o
9 in greylist-max-p
0 in greylist-max-q

and the raw output

$ ~/Downloads/veridex-tool/veridex-mac/appcompat.sh --dex-file=app-calibration-arizona-debug.apk 
NOTE: appcompat.sh is still under development. It can report
API uses that do not execute at runtime, and reflection uses
that do not exist. It can also miss on reflection uses.
#1: Linking greylist Lsun/misc/Unsafe;->allocateInstance(Ljava/lang/Class;)Ljava/lang/Object; use(s):
       Lcom/google/protobuf/UnsafeUtil;->allocateInstance(Ljava/lang/Class;)Ljava/lang/Object;

#2: Linking greylist,core-platform-api Lsun/misc/Unsafe;->arrayBaseOffset(Ljava/lang/Class;)I use(s):
       Lcom/google/common/hash/LittleEndianByteArray$UnsafeByteArray;-><clinit>()V
       Lcom/google/common/primitives/UnsignedBytes$LexicographicalComparatorHolder$UnsafeComparator;-><clinit>()V
       Lcom/google/protobuf/UnsafeUtil$MemoryAccessor;->arrayBaseOffset(Ljava/lang/Class;)I
       Lj$/util/concurrent/ConcurrentHashMap;-><clinit>()V

#3: Linking greylist,core-platform-api Lsun/misc/Unsafe;->arrayIndexScale(Ljava/lang/Class;)I use(s):
       Lcom/google/common/hash/LittleEndianByteArray$UnsafeByteArray;-><clinit>()V
       Lcom/google/common/primitives/UnsignedBytes$LexicographicalComparatorHolder$UnsafeComparator;-><clinit>()V
       Lcom/google/protobuf/UnsafeUtil$MemoryAccessor;->arrayIndexScale(Ljava/lang/Class;)I
       Lj$/util/concurrent/ConcurrentHashMap;-><clinit>()V

#4: Linking greylist Lsun/misc/Unsafe;->compareAndSwapInt(Ljava/lang/Object;JII)Z use(s):
       Lcom/google/common/cache/Striped64;->casBusy()Z
       Lcom/google/common/hash/Striped64;->casBusy()Z
       Lj$/util/concurrent/ConcurrentHashMap$TreeBin;->contendedLock()V (2 occurrences)
       Lj$/util/concurrent/ConcurrentHashMap$TreeBin;->find(ILjava/lang/Object;)Lj$/util/concurrent/ConcurrentHashMap$Node;
       Lj$/util/concurrent/ConcurrentHashMap$TreeBin;->lockRoot()V
       Lj$/util/concurrent/ConcurrentHashMap;->addCount(JI)V (2 occurrences)
       Lj$/util/concurrent/ConcurrentHashMap;->fullAddCount(JZ)V (3 occurrences)
       Lj$/util/concurrent/ConcurrentHashMap;->helpTransfer([Lj$/util/concurrent/ConcurrentHashMap$Node;Lj$/util/concurrent/ConcurrentHashMap$Node;)[Lj$/util/concurrent/ConcurrentHashMap$Node;
       Lj$/util/concurrent/ConcurrentHashMap;->initTable()[Lj$/util/concurrent/ConcurrentHashMap$Node;
       Lj$/util/concurrent/ConcurrentHashMap;->transfer([Lj$/util/concurrent/ConcurrentHashMap$Node;[Lj$/util/concurrent/ConcurrentHashMap$Node;)V (2 occurrences)
       Lj$/util/concurrent/ConcurrentHashMap;->tryPresize(I)V (3 occurrences)
       Lj$/util/concurrent/DesugarUnsafe;->getAndAddInt(Lsun/misc/Unsafe;Ljava/lang/Object;JI)I
       Lj$/util/concurrent/DesugarUnsafe;->getAndSetInt(Lsun/misc/Unsafe;Ljava/lang/Object;JI)I

#5: Linking greylist Lsun/misc/Unsafe;->compareAndSwapLong(Ljava/lang/Object;JJJ)Z use(s):
       Lcom/google/common/cache/Striped64$Cell;->cas(JJ)Z
       Lcom/google/common/cache/Striped64;->casBase(JJ)Z
       Lcom/google/common/hash/Striped64$Cell;->cas(JJ)Z
       Lcom/google/common/hash/Striped64;->casBase(JJ)Z
       Lj$/util/concurrent/ConcurrentHashMap;->addCount(JI)V (2 occurrences)
       Lj$/util/concurrent/ConcurrentHashMap;->fullAddCount(JZ)V (2 occurrences)
       Lj$/util/concurrent/DesugarUnsafe;->getAndAddLong(Lsun/misc/Unsafe;Ljava/lang/Object;JJ)J
       Lj$/util/concurrent/DesugarUnsafe;->getAndSetLong(Lsun/misc/Unsafe;Ljava/lang/Object;JJ)J

#6: Linking greylist Lsun/misc/Unsafe;->compareAndSwapObject(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z use(s):
       Lcom/google/common/util/concurrent/AbstractFuture$UnsafeAtomicHelper;->casListeners(Lcom/google/common/util/concurrent/AbstractFuture;Lcom/google/common/util/concurrent/AbstractFuture$Listener;Lcom/google/common/util/concurrent/AbstractFuture$Listener;)Z
       Lcom/google/common/util/concurrent/AbstractFuture$UnsafeAtomicHelper;->casValue(Lcom/google/common/util/concurrent/AbstractFuture;Ljava/lang/Object;Ljava/lang/Object;)Z
       Lcom/google/common/util/concurrent/AbstractFuture$UnsafeAtomicHelper;->casWaiters(Lcom/google/common/util/concurrent/AbstractFuture;Lcom/google/common/util/concurrent/AbstractFuture$Waiter;Lcom/google/common/util/concurrent/AbstractFuture$Waiter;)Z
       Lj$/util/concurrent/ConcurrentHashMap;->casTabAt([Lj$/util/concurrent/ConcurrentHashMap$Node;ILj$/util/concurrent/ConcurrentHashMap$Node;Lj$/util/concurrent/ConcurrentHashMap$Node;)Z
       Lj$/util/concurrent/DesugarUnsafe;->getAndSetObject(Lsun/misc/Unsafe;Ljava/lang/Object;JLjava/lang/Object;)Ljava/lang/Object;

#7: Linking greylist,core-platform-api Lsun/misc/Unsafe;->getBoolean(Ljava/lang/Object;J)Z use(s):
       Lcom/google/protobuf/UnsafeUtil$JvmMemoryAccessor;->getBoolean(Ljava/lang/Object;J)Z

#8: Linking greylist,core-platform-api Lsun/misc/Unsafe;->getByte(J)B use(s):
       Lcom/google/protobuf/UnsafeUtil$JvmMemoryAccessor;->getByte(J)B

#9: Linking greylist,core-platform-api Lsun/misc/Unsafe;->getByte(Ljava/lang/Object;J)B use(s):
       Lcom/google/protobuf/UnsafeUtil$JvmMemoryAccessor;->getByte(Ljava/lang/Object;J)B

#10: Linking greylist,core-platform-api Lsun/misc/Unsafe;->getDouble(Ljava/lang/Object;J)D use(s):
       Lcom/google/protobuf/UnsafeUtil$JvmMemoryAccessor;->getDouble(Ljava/lang/Object;J)D

#11: Linking greylist,core-platform-api Lsun/misc/Unsafe;->getFloat(Ljava/lang/Object;J)F use(s):
       Lcom/google/protobuf/UnsafeUtil$JvmMemoryAccessor;->getFloat(Ljava/lang/Object;J)F

#12: Linking greylist,core-platform-api Lsun/misc/Unsafe;->getInt(J)I use(s):
       Lcom/google/protobuf/UnsafeUtil$JvmMemoryAccessor;->getInt(J)I

#13: Linking greylist,core-platform-api Lsun/misc/Unsafe;->getInt(Ljava/lang/Object;J)I use(s):
       Lcom/google/protobuf/MessageSchema;->getSerializedSizeProto2(Ljava/lang/Object;)I (5 occurrences)
       Lcom/google/protobuf/MessageSchema;->isInitialized(Ljava/lang/Object;)Z
       Lcom/google/protobuf/MessageSchema;->parseOneofField(Ljava/lang/Object;[BIIIIIIIJILcom/google/protobuf/ArrayDecoders$Registers;)I (2 occurrences)
       Lcom/google/protobuf/MessageSchema;->parseProto2Message(Ljava/lang/Object;[BIIILcom/google/protobuf/ArrayDecoders$Registers;)I
       Lcom/google/protobuf/MessageSchema;->parseProto3Message(Ljava/lang/Object;[BIILcom/google/protobuf/ArrayDecoders$Registers;)I
       Lcom/google/protobuf/MessageSchema;->writeFieldsInAscendingOrderProto2(Ljava/lang/Object;Lcom/google/protobuf/Writer;)V (7 occurrences)
       Lcom/google/protobuf/UnsafeUtil$MemoryAccessor;->getInt(Ljava/lang/Object;J)I

#14: Linking greylist Lsun/misc/Unsafe;->getIntVolatile(Ljava/lang/Object;J)I use(s):
       Lj$/util/concurrent/DesugarUnsafe;->getAndAddInt(Lsun/misc/Unsafe;Ljava/lang/Object;JI)I
       Lj$/util/concurrent/DesugarUnsafe;->getAndSetInt(Lsun/misc/Unsafe;Ljava/lang/Object;JI)I

#15: Linking greylist,core-platform-api Lsun/misc/Unsafe;->getLong(J)J use(s):
       Lcom/google/protobuf/UnsafeUtil$JvmMemoryAccessor;->getLong(J)J

#16: Linking greylist,core-platform-api Lsun/misc/Unsafe;->getLong(Ljava/lang/Object;J)J use(s):
       Lcom/google/common/hash/LittleEndianByteArray$UnsafeByteArray$1;->getLongLittleEndian([BI)J
       Lcom/google/common/hash/LittleEndianByteArray$UnsafeByteArray$2;->getLongLittleEndian([BI)J
       Lcom/google/common/primitives/UnsignedBytes$LexicographicalComparatorHolder$UnsafeComparator;->compare([B[B)I (2 occurrences)
       Lcom/google/protobuf/MessageSchema;->getSerializedSizeProto2(Ljava/lang/Object;)I (3 occurrences)
       Lcom/google/protobuf/MessageSchema;->writeFieldsInAscendingOrderProto2(Ljava/lang/Object;Lcom/google/protobuf/Writer;)V (5 occurrences)
       Lcom/google/protobuf/UnsafeUtil$MemoryAccessor;->getLong(Ljava/lang/Object;J)J

#17: Linking greylist Lsun/misc/Unsafe;->getLongVolatile(Ljava/lang/Object;J)J use(s):
       Lj$/util/concurrent/DesugarUnsafe;->getAndAddLong(Lsun/misc/Unsafe;Ljava/lang/Object;JJ)J
       Lj$/util/concurrent/DesugarUnsafe;->getAndSetLong(Lsun/misc/Unsafe;Ljava/lang/Object;JJ)J

#18: Linking greylist,core-platform-api Lsun/misc/Unsafe;->getObject(Ljava/lang/Object;J)Ljava/lang/Object; use(s):
       Lcom/google/protobuf/MessageSchema;->getSerializedSizeProto2(Ljava/lang/Object;)I (41 occurrences)
       Lcom/google/protobuf/MessageSchema;->getSerializedSizeProto3(Ljava/lang/Object;)I (14 occurrences)
       Lcom/google/protobuf/MessageSchema;->parseMapField(Ljava/lang/Object;[BIIIJLcom/google/protobuf/ArrayDecoders$Registers;)I
       Lcom/google/protobuf/MessageSchema;->parseOneofField(Ljava/lang/Object;[BIIIIIIIJILcom/google/protobuf/ArrayDecoders$Registers;)I (2 occurrences)
       Lcom/google/protobuf/MessageSchema;->parseProto2Message(Ljava/lang/Object;[BIIILcom/google/protobuf/ArrayDecoders$Registers;)I (3 occurrences)
       Lcom/google/protobuf/MessageSchema;->parseProto3Message(Ljava/lang/Object;[BIILcom/google/protobuf/ArrayDecoders$Registers;)I (2 occurrences)
       Lcom/google/protobuf/MessageSchema;->parseRepeatedField(Ljava/lang/Object;[BIIIIIIJIJLcom/google/protobuf/ArrayDecoders$Registers;)I
       Lcom/google/protobuf/MessageSchema;->writeFieldsInAscendingOrderProto2(Ljava/lang/Object;Lcom/google/protobuf/Writer;)V (41 occurrences)
       Lcom/google/protobuf/UnsafeUtil$MemoryAccessor;->getObject(Ljava/lang/Object;J)Ljava/lang/Object;

#19: Linking greylist Lsun/misc/Unsafe;->getObjectVolatile(Ljava/lang/Object;J)Ljava/lang/Object; use(s):
       Lj$/util/concurrent/ConcurrentHashMap;->tabAt([Lj$/util/concurrent/ConcurrentHashMap$Node;I)Lj$/util/concurrent/ConcurrentHashMap$Node;
       Lj$/util/concurrent/DesugarUnsafe;->getAndSetObject(Lsun/misc/Unsafe;Ljava/lang/Object;JLjava/lang/Object;)Ljava/lang/Object;

#20: Linking greylist,core-platform-api Lsun/misc/Unsafe;->getUnsafe()Lsun/misc/Unsafe; use(s):
       Lcom/google/common/cache/Striped64;->getUnsafe()Lsun/misc/Unsafe;
       Lcom/google/common/hash/LittleEndianByteArray$UnsafeByteArray;->getUnsafe()Lsun/misc/Unsafe;
       Lcom/google/common/hash/Striped64;->getUnsafe()Lsun/misc/Unsafe;
       Lcom/google/common/primitives/UnsignedBytes$LexicographicalComparatorHolder$UnsafeComparator;->getUnsafe()Lsun/misc/Unsafe;
       Lcom/google/common/util/concurrent/AbstractFuture$UnsafeAtomicHelper;-><clinit>()V

#21: Linking greylist,core-platform-api Lsun/misc/Unsafe;->objectFieldOffset(Ljava/lang/reflect/Field;)J use(s):
       Lcom/google/common/cache/Striped64$Cell;-><clinit>()V
       Lcom/google/common/cache/Striped64;-><clinit>()V (2 occurrences)
       Lcom/google/common/hash/Striped64$Cell;-><clinit>()V
       Lcom/google/common/hash/Striped64;-><clinit>()V (2 occurrences)
       Lcom/google/common/util/concurrent/AbstractFuture$UnsafeAtomicHelper;-><clinit>()V (5 occurrences)
       Lcom/google/protobuf/MessageSchema;->newSchemaForRawMessageInfo(Lcom/google/protobuf/RawMessageInfo;Lcom/google/protobuf/NewInstanceSchema;Lcom/google/protobuf/ListFieldSchema;Lcom/google/protobuf/UnknownFieldSchema;Lcom/google/protobuf/ExtensionSchema;Lcom/google/protobuf/MapFieldSchema;)Lcom/google/protobuf/MessageSchema; (4 occurrences)
       Lcom/google/protobuf/UnsafeUtil$MemoryAccessor;->objectFieldOffset(Ljava/lang/reflect/Field;)J
       Lj$/util/concurrent/ConcurrentHashMap$TreeBin;-><clinit>()V
       Lj$/util/concurrent/ConcurrentHashMap;-><clinit>()V (5 occurrences)

#22: Linking greylist,core-platform-api Lsun/misc/Unsafe;->putBoolean(Ljava/lang/Object;JZ)V use(s):
       Lcom/google/protobuf/UnsafeUtil$JvmMemoryAccessor;->putBoolean(Ljava/lang/Object;JZ)V

#23: Linking greylist,core-platform-api Lsun/misc/Unsafe;->putByte(JB)V use(s):
       Lcom/google/protobuf/UnsafeUtil$JvmMemoryAccessor;->putByte(JB)V

#24: Linking greylist,core-platform-api Lsun/misc/Unsafe;->putByte(Ljava/lang/Object;JB)V use(s):
       Lcom/google/protobuf/UnsafeUtil$JvmMemoryAccessor;->putByte(Ljava/lang/Object;JB)V

#25: Linking greylist,core-platform-api Lsun/misc/Unsafe;->putDouble(Ljava/lang/Object;JD)V use(s):
       Lcom/google/protobuf/UnsafeUtil$JvmMemoryAccessor;->putDouble(Ljava/lang/Object;JD)V

#26: Linking greylist,core-platform-api Lsun/misc/Unsafe;->putFloat(Ljava/lang/Object;JF)V use(s):
       Lcom/google/protobuf/UnsafeUtil$JvmMemoryAccessor;->putFloat(Ljava/lang/Object;JF)V

#27: Linking greylist,core-platform-api Lsun/misc/Unsafe;->putInt(JI)V use(s):
       Lcom/google/protobuf/UnsafeUtil$JvmMemoryAccessor;->putInt(JI)V

#28: Linking greylist,core-platform-api Lsun/misc/Unsafe;->putInt(Ljava/lang/Object;JI)V use(s):
       Lcom/google/protobuf/MessageSchema;->getSerializedSizeProto2(Ljava/lang/Object;)I (14 occurrences)
       Lcom/google/protobuf/MessageSchema;->getSerializedSizeProto3(Ljava/lang/Object;)I (14 occurrences)
       Lcom/google/protobuf/MessageSchema;->parseOneofField(Ljava/lang/Object;[BIIIIIIIJILcom/google/protobuf/ArrayDecoders$Registers;)I (14 occurrences)
       Lcom/google/protobuf/MessageSchema;->parseProto2Message(Ljava/lang/Object;[BIIILcom/google/protobuf/ArrayDecoders$Registers;)I (6 occurrences)
       Lcom/google/protobuf/MessageSchema;->parseProto3Message(Ljava/lang/Object;[BIILcom/google/protobuf/ArrayDecoders$Registers;)I (6 occurrences)
       Lcom/google/protobuf/UnsafeUtil$MemoryAccessor;->putInt(Ljava/lang/Object;JI)V

#29: Linking greylist,core-platform-api Lsun/misc/Unsafe;->putLong(JJ)V use(s):
       Lcom/google/protobuf/UnsafeUtil$JvmMemoryAccessor;->putLong(JJ)V

#30: Linking greylist,core-platform-api Lsun/misc/Unsafe;->putLong(Ljava/lang/Object;JJ)V use(s):
       Lcom/google/common/hash/LittleEndianByteArray$UnsafeByteArray$1;->putLongLittleEndian([BIJ)V
       Lcom/google/common/hash/LittleEndianByteArray$UnsafeByteArray$2;->putLongLittleEndian([BIJ)V
       Lcom/google/protobuf/MessageSchema;->parseProto2Message(Ljava/lang/Object;[BIIILcom/google/protobuf/ArrayDecoders$Registers;)I (3 occurrences)
       Lcom/google/protobuf/MessageSchema;->parseProto3Message(Ljava/lang/Object;[BIILcom/google/protobuf/ArrayDecoders$Registers;)I (3 occurrences)
       Lcom/google/protobuf/UnsafeUtil$MemoryAccessor;->putLong(Ljava/lang/Object;JJ)V

#31: Linking greylist,core-platform-api Lsun/misc/Unsafe;->putObject(Ljava/lang/Object;JLjava/lang/Object;)V use(s):
       Lcom/google/common/util/concurrent/AbstractFuture$UnsafeAtomicHelper;->putNext(Lcom/google/common/util/concurrent/AbstractFuture$Waiter;Lcom/google/common/util/concurrent/AbstractFuture$Waiter;)V
       Lcom/google/common/util/concurrent/AbstractFuture$UnsafeAtomicHelper;->putThread(Lcom/google/common/util/concurrent/AbstractFuture$Waiter;Ljava/lang/Thread;)V
       Lcom/google/protobuf/MessageSchema;->parseMapField(Ljava/lang/Object;[BIIIJLcom/google/protobuf/ArrayDecoders$Registers;)I
       Lcom/google/protobuf/MessageSchema;->parseOneofField(Ljava/lang/Object;[BIIIIIIIJILcom/google/protobuf/ArrayDecoders$Registers;)I (17 occurrences)
       Lcom/google/protobuf/MessageSchema;->parseProto2Message(Ljava/lang/Object;[BIIILcom/google/protobuf/ArrayDecoders$Registers;)I (7 occurrences)
       Lcom/google/protobuf/MessageSchema;->parseProto3Message(Ljava/lang/Object;[BIILcom/google/protobuf/ArrayDecoders$Registers;)I (5 occurrences)
       Lcom/google/protobuf/MessageSchema;->parseRepeatedField(Ljava/lang/Object;[BIIIIIIJIJLcom/google/protobuf/ArrayDecoders$Registers;)I
       Lcom/google/protobuf/UnsafeUtil$MemoryAccessor;->putObject(Ljava/lang/Object;JLjava/lang/Object;)V

#32: Linking greylist Lsun/misc/Unsafe;->putObjectVolatile(Ljava/lang/Object;JLjava/lang/Object;)V use(s):
       Lj$/util/concurrent/ConcurrentHashMap;->setTabAt([Lj$/util/concurrent/ConcurrentHashMap$Node;ILj$/util/concurrent/ConcurrentHashMap$Node;)V

#33: Reflection greylist-max-p Landroid/animation/LayoutTransition;->cancel use(s):
       Landroidx/transition/ViewGroupUtilsApi14;->cancelLayoutTransition(Landroid/animation/LayoutTransition;)V

#34: Reflection greylist Landroid/app/Activity;->mMainThread use(s):
       Landroidx/core/app/ActivityRecreator;->getMainThreadField()Ljava/lang/reflect/Field;

#35: Reflection greylist Landroid/app/Activity;->mToken use(s):
       Landroidx/core/app/ActivityRecreator;->getTokenField()Ljava/lang/reflect/Field;

#36: Reflection greylist Landroid/app/ActivityThread;->currentApplication use(s):
       Lcom/jaredrummler/android/device/DeviceName;->context()Landroid/content/Context;

#37: Reflection greylist Landroid/app/Dialog;->mOnKeyListener use(s):
       Landroidx/core/view/KeyEventDispatcher;->getDialogKeyListenerPre28(Landroid/app/Dialog;)Landroid/content/DialogInterface$OnKeyListener;

#38: Reflection greylist Landroid/content/res/Resources;->mResourcesImpl use(s):
       Landroidx/appcompat/app/ResourcesFlusher;->flushNougats(Landroid/content/res/Resources;)V

#39: Reflection greylist Landroid/graphics/Typeface;->createFromFamiliesWithDefault use(s):
       Landroidx/core/graphics/TypefaceCompatApi21Impl;->init()V
       Landroidx/core/graphics/TypefaceCompatApi24Impl;-><clinit>()V
       Landroidx/core/graphics/TypefaceCompatApi26Impl;->obtainCreateFromFamiliesWithDefaultMethod(Ljava/lang/Class;)Ljava/lang/reflect/Method;
       Landroidx/core/graphics/TypefaceCompatApi28Impl;->obtainCreateFromFamiliesWithDefaultMethod(Ljava/lang/Class;)Ljava/lang/reflect/Method;

#40: Reflection greylist Landroid/graphics/Typeface;->native_instance use(s):
       Landroidx/core/graphics/TypefaceCompatBaseImpl;->getUniqueKey(Landroid/graphics/Typeface;)J

#41: Reflection greylist Landroid/os/Bundle;->getIBinder use(s):
       Landroidx/core/app/BundleCompat$BundleCompatBaseImpl;->getBinder(Landroid/os/Bundle;Ljava/lang/String;)Landroid/os/IBinder;

#42: Reflection greylist Landroid/os/Bundle;->putIBinder use(s):
       Landroidx/core/app/BundleCompat$BundleCompatBaseImpl;->putBinder(Landroid/os/Bundle;Ljava/lang/String;Landroid/os/IBinder;)V

#43: Reflection greylist,test-api Landroid/os/WorkSource;->add use(s):
       Lcom/google/android/gms/common/util/WorkSourceUtil;->zza()Ljava/lang/reflect/Method;
       Lcom/google/android/gms/common/util/WorkSourceUtil;->zzb()Ljava/lang/reflect/Method;

#44: Reflection greylist Landroid/os/WorkSource;->get use(s):
       Lcom/google/android/gms/common/util/WorkSourceUtil;->zzd()Ljava/lang/reflect/Method;

#45: Reflection greylist Landroid/os/WorkSource;->getName use(s):
       Lcom/google/android/gms/common/util/WorkSourceUtil;->zze()Ljava/lang/reflect/Method;

#46: Reflection greylist Landroid/view/LayoutInflater;->mFactory2 use(s):
       Landroidx/core/view/LayoutInflaterCompat;->forceSetFactory2(Landroid/view/LayoutInflater;Landroid/view/LayoutInflater$Factory2;)V

#47: Reflection greylist Landroid/view/View;->computeFitSystemWindows use(s):
       Landroidx/appcompat/widget/ViewUtils;-><clinit>()V

#48: Reflection greylist Landroid/view/View;->mAccessibilityDelegate use(s):
       Landroidx/core/view/ViewCompat;->getAccessibilityDelegateThroughReflection(Landroid/view/View;)Landroid/view/View$AccessibilityDelegate;

#49: Reflection greylist-max-p Landroid/view/View;->mViewFlags use(s):
       Landroidx/transition/ViewUtilsBase;->setTransitionVisibility(Landroid/view/View;I)V

#50: Reflection greylist-max-p Landroid/view/View;->setFrame use(s):
       Landroidx/transition/ViewUtilsBase;->fetchSetFrame()V

#51: Reflection greylist-max-p Landroid/view/inputmethod/InputMethodManager;->mH use(s):
       Landroidx/activity/ImmLeaksCleaner;->initializeReflectiveFields()V

#52: Reflection greylist Landroid/widget/AbsListView;->mIsChildViewEnabled use(s):
       Landroidx/appcompat/widget/DropDownListView;-><init>(Landroid/content/Context;Z)V

#53: Reflection greylist-max-p Landroid/widget/AutoCompleteTextView;->doAfterTextChanged use(s):
       Landroidx/appcompat/widget/SearchView$PreQAutoCompleteTextViewReflector;-><init>()V

#54: Reflection greylist-max-p Landroid/widget/AutoCompleteTextView;->doBeforeTextChanged use(s):
       Landroidx/appcompat/widget/SearchView$PreQAutoCompleteTextViewReflector;-><init>()V

#55: Reflection greylist-max-p Landroid/widget/AutoCompleteTextView;->ensureImeVisible use(s):
       Landroidx/appcompat/widget/SearchView$PreQAutoCompleteTextViewReflector;-><init>()V

#56: Reflection greylist-max-p Landroid/widget/ImageView;->mDrawMatrix use(s):
       Landroidx/transition/ImageViewUtils;->fetchDrawMatrixField()V

#57: Reflection greylist-max-p Landroid/widget/TextView;->getHorizontallyScrolling use(s):
       Landroidx/appcompat/widget/AppCompatTextViewAutoSizeHelper$Impl;->isHorizontallyScrollable(Landroid/widget/TextView;)Z

#58: Reflection greylist Landroid/widget/TextView;->getLayoutAlignment use(s):
       Landroidx/appcompat/widget/AppCompatTextViewAutoSizeHelper;->suggestedSizeFitsInSpace(ILandroid/graphics/RectF;)Z

#59: Reflection greylist Landroid/widget/TextView;->mIncludePad use(s):
       Landroidx/appcompat/widget/AppCompatTextViewAutoSizeHelper;->createStaticLayoutForMeasuringPre16(Ljava/lang/CharSequence;Landroid/text/Layout$Alignment;I)Landroid/text/StaticLayout;

#60: Reflection greylist Landroid/widget/TextView;->mSpacingAdd use(s):
       Landroidx/appcompat/widget/AppCompatTextViewAutoSizeHelper;->createStaticLayoutForMeasuringPre16(Ljava/lang/CharSequence;Landroid/text/Layout$Alignment;I)Landroid/text/StaticLayout;

#61: Reflection greylist Landroid/widget/TextView;->mSpacingMult use(s):
       Landroidx/appcompat/widget/AppCompatTextViewAutoSizeHelper;->createStaticLayoutForMeasuringPre16(Ljava/lang/CharSequence;Landroid/text/Layout$Alignment;I)Landroid/text/StaticLayout;

#62: Reflection greylist Landroid/widget/TextView;->nullLayouts use(s):
       Landroidx/appcompat/widget/AppCompatTextViewAutoSizeHelper;->setRawTextSize(F)V

#63: Reflection greylist-max-o Lcom/android/internal/view/menu/MenuBuilder;->removeItemAt use(s):
       Landroidx/core/widget/TextViewCompat$OreoCallback;->recomputeProcessTextMenuItems(Landroid/view/Menu;)V

#64: Reflection greylist,core-platform-api Ldalvik/system/CloseGuard;->get use(s):
       Lokhttp3/internal/platform/android/CloseGuard$Companion;->get()Lokhttp3/internal/platform/android/CloseGuard;

#65: Reflection greylist,core-platform-api Ldalvik/system/CloseGuard;->open use(s):
       Lokhttp3/internal/platform/android/CloseGuard$Companion;->get()Lokhttp3/internal/platform/android/CloseGuard;

#66: Reflection greylist,core-platform-api Ldalvik/system/CloseGuard;->warnIfOpen use(s):
       Lokhttp3/internal/platform/android/CloseGuard$Companion;->get()Lokhttp3/internal/platform/android/CloseGuard;

#67: Reflection greylist,core-platform-api Ljava/lang/Thread;->getUncaughtExceptionPreHandler use(s):
       Lkotlinx/coroutines/android/AndroidExceptionPreHandler;->preHandler()Ljava/lang/reflect/Method;

#68: Reflection greylist Ljava/lang/Thread;->inheritableThreadLocals use(s):
       Lcom/google/common/base/internal/Finalizer;->getInheritableThreadLocalsField()Ljava/lang/reflect/Field;

#69: Reflection greylist Ljava/lang/reflect/AccessibleObject;->override use(s):
       Lcom/google/gson/internal/reflect/UnsafeReflectionAccessor;->getOverrideField()Ljava/lang/reflect/Field;

#70: Reflection greylist Ljava/nio/Buffer;->address use(s):
       Lcom/google/protobuf/UnsafeUtil;->bufferAddressField()Ljava/lang/reflect/Field;
       Lcom/google/protobuf/UnsafeUtil;->bufferAddressField()Ljava/lang/reflect/Field;

#71: Reflection greylist-max-o Ljava/util/DoubleSummaryStatistics;->count use(s):
       Lj$/util/DoubleSummaryStatisticsConversions;-><clinit>()V

#72: Reflection greylist-max-o Ljava/util/DoubleSummaryStatistics;->max use(s):
       Lj$/util/DoubleSummaryStatisticsConversions;-><clinit>()V

#73: Reflection greylist-max-o Ljava/util/DoubleSummaryStatistics;->min use(s):
       Lj$/util/DoubleSummaryStatisticsConversions;-><clinit>()V

#74: Reflection greylist-max-o Ljava/util/DoubleSummaryStatistics;->sum use(s):
       Lj$/util/DoubleSummaryStatisticsConversions;-><clinit>()V

#75: Reflection greylist-max-o Ljava/util/IntSummaryStatistics;->count use(s):
       Lj$/util/IntSummaryStatisticsConversions;-><clinit>()V

#76: Reflection greylist-max-o Ljava/util/IntSummaryStatistics;->max use(s):
       Lj$/util/IntSummaryStatisticsConversions;-><clinit>()V

#77: Reflection greylist-max-o Ljava/util/IntSummaryStatistics;->min use(s):
       Lj$/util/IntSummaryStatisticsConversions;-><clinit>()V

#78: Reflection greylist-max-o Ljava/util/IntSummaryStatistics;->sum use(s):
       Lj$/util/IntSummaryStatisticsConversions;-><clinit>()V

#79: Reflection greylist-max-o Ljava/util/LongSummaryStatistics;->count use(s):
       Lj$/util/LongSummaryStatisticsConversions;-><clinit>()V

#80: Reflection greylist-max-o Ljava/util/LongSummaryStatistics;->max use(s):
       Lj$/util/LongSummaryStatisticsConversions;-><clinit>()V

#81: Reflection greylist-max-o Ljava/util/LongSummaryStatistics;->min use(s):
       Lj$/util/LongSummaryStatisticsConversions;-><clinit>()V

#82: Reflection greylist-max-o Ljava/util/LongSummaryStatistics;->sum use(s):
       Lj$/util/LongSummaryStatisticsConversions;-><clinit>()V

#83: Reflection greylist Lsun/misc/Unsafe;->allocateInstance use(s):
       Lcom/google/gson/internal/UnsafeAllocator;->create()Lcom/google/gson/internal/UnsafeAllocator;

#84: Reflection greylist Lsun/misc/Unsafe;->theUnsafe use(s):
       Lj$/util/concurrent/DesugarUnsafe;->getField()Ljava/lang/reflect/Field;
       Lcom/google/gson/internal/UnsafeAllocator;->create()Lcom/google/gson/internal/UnsafeAllocator;
       Lcom/google/gson/internal/reflect/UnsafeReflectionAccessor;->getUnsafeInstance()Ljava/lang/Object;

84 hidden API(s) used: 32 linked against, 52 through reflection
	62 in greylist
	0 in blacklist
	13 in greylist-max-o
	9 in greylist-max-p
	0 in greylist-max-q
To run an analysis that can give more reflection accesses, 
but could include false positives, pass the --imprecise flag. 

@rasprague
Copy link
Collaborator Author

rasprague commented Sep 15, 2020

  • zero blacklist usages

  • several greylist usages, but none are called by our code directly

    • majority of uses are through classes in java.util.* , com.google.* , and androidx.*
    • one use from kotlinx.coroutines.android.AndroidExceptionPreHandler
    • a couple uses from okhttp3.internal.platform.android.CloseGuard$Companion
    • one use from com.jaredrummler.android.device.DeviceName

Copy link
Member

@Apisov Apisov left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Great analysis! 👏

But we need to use the build tools from the new SDK so it will something like 30.a.b.

app/build.gradle Outdated
@@ -18,13 +18,13 @@ androidGitVersion {
}

android {
compileSdkVersion 29
compileSdkVersion 30
buildToolsVersion "29.0.3"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please update the build tools to the appropriate version as well and test the app after that.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

bumped up to 30.0.0

bump buildToolsVersion to 30.0.0
@Apisov Apisov merged commit a9d6fe1 into develop Sep 16, 2020
@Apisov Apisov deleted the android-api-30 branch September 16, 2020 15:28
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants