mirror of
https://github.com/nextcloud/talk-android
synced 2025-07-24 21:25:35 +01:00
Support 16 KB page sizes
by replacing net.zetetic:android-database-sqlcipher with net.zetetic:sqlcipher-android which should hopefully solve the error Exception java.lang.UnsatisfiedLinkError: dlopen failed: empty/missing DT_HASH/DT_GNU_HASH in "/data/app/~~HfdEzwuB9IXXVa0Fvds_Kw==/com.nextcloud.talk2-yCC7T_sy5lQWb9w17SZlVQ==/base.apk!/lib/arm64-v8a/libsqlcipher.so" (new hash type from the future?) at java.lang.Runtime.loadLibrary0 (Runtime.java:1081) at java.lang.Runtime.loadLibrary0 (Runtime.java:1003) at java.lang.System.loadLibrary (System.java:1765) at net.sqlcipher.database.SQLiteDatabase$1.loadLibraries (SQLiteDatabase.java:230) at net.sqlcipher.database.SQLiteDatabase.loadLibs (SQLiteDatabase.java:247) at net.sqlcipher.database.SQLiteDatabase.loadLibs (SQLiteDatabase.java:226) at net.sqlcipher.database.SQLiteDatabase.loadLibs (SQLiteDatabase.java:219) at net.sqlcipher.database.SupportHelper.<init> (SupportHelper.java:31) at net.sqlcipher.database.SupportFactory.create (SupportFactory.java:43) at androidx.room.RoomConnectionManager.<init> (RoomConnectionManager.android.kt:68) at androidx.room.RoomDatabase.createConnectionManager$room_runtime_release (RoomDatabase.android.kt:318) at androidx.room.RoomDatabase.init (RoomDatabase.android.kt:229) at androidx.room.RoomDatabase$Builder.build (RoomDatabase.android.kt:1769) at com.nextcloud.talk.data.source.local.TalkDatabase$Companion.build (TalkDatabase.kt:136) at com.nextcloud.talk.data.source.local.TalkDatabase$Companion.getInstance (TalkDatabase.kt:89) at com.nextcloud.talk.data.source.local.TalkDatabase.getInstance (Unknown Source:2) at com.nextcloud.talk.dagger.modules.DatabaseModule.provideTalkDatabase (DatabaseModule.java:47) at com.nextcloud.talk.dagger.modules.DatabaseModule_ProvideTalkDatabaseFactory.provideTalkDatabase (DatabaseModule_ProvideTalkDatabaseFactory.java:56) at com.nextcloud.talk.dagger.modules.DatabaseModule_ProvideTalkDatabaseFactory.get (DatabaseModule_ProvideTalkDatabaseFactory.java:46) at com.nextcloud.talk.dagger.modules.DatabaseModule_ProvideTalkDatabaseFactory.get (DatabaseModule_ProvideTalkDatabaseFactory.java:14) at dagger.internal.DoubleCheck.getSynchronized (DoubleCheck.java:54) at dagger.internal.DoubleCheck.get (DoubleCheck.java:45) at com.nextcloud.talk.dagger.modules.RepositoryModule_ProvideUsersRepositoryFactory.get (RepositoryModule_ProvideUsersRepositoryFactory.java:42) at com.nextcloud.talk.dagger.modules.RepositoryModule_ProvideUsersRepositoryFactory.get (RepositoryModule_ProvideUsersRepositoryFactory.java:13) at com.nextcloud.talk.utils.database.user.UserModule_Companion_ProvideUserManagerFactory.get (UserModule_Companion_ProvideUserManagerFactory.java:39) at com.nextcloud.talk.utils.database.user.UserModule_Companion_ProvideUserManagerFactory.get (UserModule_Companion_ProvideUserManagerFactory.java:13) at com.nextcloud.talk.dagger.modules.RestModule_ProvideKeyManagerFactory.get (RestModule_ProvideKeyManagerFactory.java:46) at com.nextcloud.talk.dagger.modules.RestModule_ProvideKeyManagerFactory.get (RestModule_ProvideKeyManagerFactory.java:14) at dagger.internal.DoubleCheck.getSynchronized (DoubleCheck.java:54) at dagger.internal.DoubleCheck.get (DoubleCheck.java:45) at com.nextcloud.talk.dagger.modules.RestModule_ProvideSslSocketFactoryCompatFactory.get (RestModule_ProvideSslSocketFactoryCompatFactory.java:46) at com.nextcloud.talk.dagger.modules.RestModule_ProvideSslSocketFactoryCompatFactory.get (RestModule_ProvideSslSocketFactoryCompatFactory.java:14) at dagger.internal.DoubleCheck.getSynchronized (DoubleCheck.java:54) at dagger.internal.DoubleCheck.get (DoubleCheck.java:45) at com.nextcloud.talk.dagger.modules.RestModule_ProvideHttpClientFactory.get (RestModule_ProvideHttpClientFactory.java:69) at com.nextcloud.talk.dagger.modules.RestModule_ProvideHttpClientFactory.get (RestModule_ProvideHttpClientFactory.java:19) at dagger.internal.DoubleCheck.getSynchronized (DoubleCheck.java:54) at dagger.internal.DoubleCheck.get (DoubleCheck.java:45) at com.nextcloud.talk.application.DaggerNextcloudTalkApplicationComponent$NextcloudTalkApplicationComponentImpl.injectNextcloudTalkApplication (DaggerNextcloudTalkApplicationComponent.java:1629) at com.nextcloud.talk.application.DaggerNextcloudTalkApplicationComponent$NextcloudTalkApplicationComponentImpl.inject (DaggerNextcloudTalkApplicationComponent.java:997) at com.nextcloud.talk.application.NextcloudTalkApplication.onCreate (NextcloudTalkApplication.kt:147) at android.app.Instrumentation.callApplicationOnCreate (Instrumentation.java:1386) at android.app.ActivityThread.handleBindApplication (ActivityThread.java:7504) at android.app.ActivityThread.-$$Nest$mhandleBindApplication (Unknown Source) at android.app.ActivityThread$H.handleMessage (ActivityThread.java:2416) at android.os.Handler.dispatchMessage (Handler.java:107) at android.os.Looper.loopOnce (Looper.java:232) at android.os.Looper.loop (Looper.java:317) at android.app.ActivityThread.main (ActivityThread.java:8705) at java.lang.reflect.Method.invoke at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:580) at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:886) which is reported in gplay console pre publish checks and blocks new releases Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
This commit is contained in:
parent
504878725a
commit
34903931bf
@ -251,7 +251,7 @@ dependencies {
|
|||||||
compileOnly 'javax.annotation:javax.annotation-api:1.3.2'
|
compileOnly 'javax.annotation:javax.annotation-api:1.3.2'
|
||||||
|
|
||||||
implementation 'org.greenrobot:eventbus:3.3.1'
|
implementation 'org.greenrobot:eventbus:3.3.1'
|
||||||
implementation 'net.zetetic:android-database-sqlcipher:4.5.4'
|
implementation 'net.zetetic:sqlcipher-android:4.9.0'
|
||||||
|
|
||||||
implementation "androidx.room:room-runtime:${roomVersion}"
|
implementation "androidx.room:room-runtime:${roomVersion}"
|
||||||
implementation "androidx.room:room-rxjava2:${roomVersion}"
|
implementation "androidx.room:room-rxjava2:${roomVersion}"
|
||||||
|
@ -253,10 +253,6 @@ class MainActivity :
|
|||||||
startActivity(chatIntent)
|
startActivity(chatIntent)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (!appPreferences.isDbRoomMigrated) {
|
|
||||||
appPreferences.isDbRoomMigrated = true
|
|
||||||
}
|
|
||||||
|
|
||||||
userManager.users.subscribe(object : SingleObserver<List<User>> {
|
userManager.users.subscribe(object : SingleObserver<List<User>> {
|
||||||
override fun onSubscribe(d: Disposable) {
|
override fun onSubscribe(d: Disposable) {
|
||||||
// unused atm
|
// unused atm
|
||||||
|
@ -58,8 +58,6 @@ import com.vanniktech.emoji.EmojiManager
|
|||||||
import com.vanniktech.emoji.google.GoogleEmojiProvider
|
import com.vanniktech.emoji.google.GoogleEmojiProvider
|
||||||
import de.cotech.hw.SecurityKeyManager
|
import de.cotech.hw.SecurityKeyManager
|
||||||
import de.cotech.hw.SecurityKeyManagerConfig
|
import de.cotech.hw.SecurityKeyManagerConfig
|
||||||
import net.sqlcipher.database.SQLiteDatabase
|
|
||||||
import net.sqlcipher.database.SQLiteDatabaseHook
|
|
||||||
import okhttp3.OkHttpClient
|
import okhttp3.OkHttpClient
|
||||||
import org.conscrypt.Conscrypt
|
import org.conscrypt.Conscrypt
|
||||||
import org.webrtc.PeerConnectionFactory
|
import org.webrtc.PeerConnectionFactory
|
||||||
@ -103,18 +101,6 @@ class NextcloudTalkApplication :
|
|||||||
lateinit var okHttpClient: OkHttpClient
|
lateinit var okHttpClient: OkHttpClient
|
||||||
//endregion
|
//endregion
|
||||||
|
|
||||||
val hook: SQLiteDatabaseHook = object : SQLiteDatabaseHook {
|
|
||||||
override fun preKey(database: SQLiteDatabase) {
|
|
||||||
// unused atm
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun postKey(database: SQLiteDatabase) {
|
|
||||||
Log.i("TalkApplication", "DB cipher_migrate START")
|
|
||||||
database.rawExecSQL("PRAGMA cipher_migrate;")
|
|
||||||
Log.i("TalkApplication", "DB cipher_migrate END")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//region private methods
|
//region private methods
|
||||||
private fun initializeWebRtc() {
|
private fun initializeWebRtc() {
|
||||||
try {
|
try {
|
||||||
|
@ -42,9 +42,8 @@ public class DatabaseModule {
|
|||||||
|
|
||||||
@Provides
|
@Provides
|
||||||
@Singleton
|
@Singleton
|
||||||
public TalkDatabase provideTalkDatabase(@NonNull final Context context,
|
public TalkDatabase provideTalkDatabase(@NonNull final Context context) {
|
||||||
@NonNull final AppPreferences appPreferences) {
|
return TalkDatabase.getInstance(context);
|
||||||
return TalkDatabase.getInstance(context, appPreferences);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Provides
|
@Provides
|
||||||
|
@ -9,7 +9,6 @@
|
|||||||
package com.nextcloud.talk.data.source.local
|
package com.nextcloud.talk.data.source.local
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.util.Log
|
|
||||||
import androidx.room.AutoMigration
|
import androidx.room.AutoMigration
|
||||||
import androidx.room.Database
|
import androidx.room.Database
|
||||||
import androidx.room.Room
|
import androidx.room.Room
|
||||||
@ -37,10 +36,7 @@ import com.nextcloud.talk.data.storage.ArbitraryStoragesDao
|
|||||||
import com.nextcloud.talk.data.storage.model.ArbitraryStorageEntity
|
import com.nextcloud.talk.data.storage.model.ArbitraryStorageEntity
|
||||||
import com.nextcloud.talk.data.user.UsersDao
|
import com.nextcloud.talk.data.user.UsersDao
|
||||||
import com.nextcloud.talk.data.user.model.UserEntity
|
import com.nextcloud.talk.data.user.model.UserEntity
|
||||||
import com.nextcloud.talk.utils.preferences.AppPreferences
|
import net.zetetic.database.sqlcipher.SupportOpenHelperFactory
|
||||||
import net.sqlcipher.database.SQLiteDatabase
|
|
||||||
import net.sqlcipher.database.SQLiteDatabaseHook
|
|
||||||
import net.sqlcipher.database.SupportFactory
|
|
||||||
import java.util.Locale
|
import java.util.Locale
|
||||||
|
|
||||||
@Database(
|
@Database(
|
||||||
@ -70,7 +66,6 @@ import java.util.Locale
|
|||||||
SendStatusConverter::class
|
SendStatusConverter::class
|
||||||
)
|
)
|
||||||
abstract class TalkDatabase : RoomDatabase() {
|
abstract class TalkDatabase : RoomDatabase() {
|
||||||
|
|
||||||
abstract fun usersDao(): UsersDao
|
abstract fun usersDao(): UsersDao
|
||||||
abstract fun conversationsDao(): ConversationsDao
|
abstract fun conversationsDao(): ConversationsDao
|
||||||
abstract fun chatMessagesDao(): ChatMessagesDao
|
abstract fun chatMessagesDao(): ChatMessagesDao
|
||||||
@ -79,27 +74,21 @@ abstract class TalkDatabase : RoomDatabase() {
|
|||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
const val TAG = "TalkDatabase"
|
const val TAG = "TalkDatabase"
|
||||||
|
const val SQL_CIPHER_LIBRARY = "sqlcipher"
|
||||||
|
|
||||||
@Volatile
|
@Volatile
|
||||||
private var instance: TalkDatabase? = null
|
private var instance: TalkDatabase? = null
|
||||||
|
|
||||||
@JvmStatic
|
@JvmStatic
|
||||||
fun getInstance(context: Context, appPreferences: AppPreferences): TalkDatabase =
|
fun getInstance(context: Context): TalkDatabase =
|
||||||
instance ?: synchronized(this) {
|
instance ?: synchronized(this) {
|
||||||
instance ?: build(context, appPreferences).also { instance = it }
|
instance ?: build(context).also { instance = it }
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun build(context: Context, appPreferences: AppPreferences): TalkDatabase {
|
private fun build(context: Context): TalkDatabase {
|
||||||
val passCharArray = context.getString(R.string.nc_talk_database_encryption_key).toCharArray()
|
val passCharArray = context.getString(R.string.nc_talk_database_encryption_key).toCharArray()
|
||||||
val passphrase: ByteArray = SQLiteDatabase.getBytes(passCharArray)
|
val passphrase: ByteArray = getBytesFromChars(passCharArray)
|
||||||
|
val factory = SupportOpenHelperFactory(passphrase)
|
||||||
val factory = if (appPreferences.isDbRoomMigrated) {
|
|
||||||
Log.i(TAG, "No cipher migration needed")
|
|
||||||
SupportFactory(passphrase)
|
|
||||||
} else {
|
|
||||||
Log.i(TAG, "Add cipher migration hook")
|
|
||||||
SupportFactory(passphrase, getCipherMigrationHook())
|
|
||||||
}
|
|
||||||
|
|
||||||
val dbName = context
|
val dbName = context
|
||||||
.resources
|
.resources
|
||||||
@ -109,6 +98,8 @@ abstract class TalkDatabase : RoomDatabase() {
|
|||||||
.trim() +
|
.trim() +
|
||||||
".sqlite"
|
".sqlite"
|
||||||
|
|
||||||
|
System.loadLibrary(SQL_CIPHER_LIBRARY)
|
||||||
|
|
||||||
return Room
|
return Room
|
||||||
.databaseBuilder(context.applicationContext, TalkDatabase::class.java, dbName)
|
.databaseBuilder(context.applicationContext, TalkDatabase::class.java, dbName)
|
||||||
// comment out openHelperFactory to view the database entries in Android Studio for debugging
|
// comment out openHelperFactory to view the database entries in Android Studio for debugging
|
||||||
@ -126,7 +117,7 @@ abstract class TalkDatabase : RoomDatabase() {
|
|||||||
)
|
)
|
||||||
.allowMainThreadQueries()
|
.allowMainThreadQueries()
|
||||||
.addCallback(
|
.addCallback(
|
||||||
object : RoomDatabase.Callback() {
|
object : Callback() {
|
||||||
override fun onOpen(db: SupportSQLiteDatabase) {
|
override fun onOpen(db: SupportSQLiteDatabase) {
|
||||||
super.onOpen(db)
|
super.onOpen(db)
|
||||||
db.execSQL("PRAGMA defer_foreign_keys = 1")
|
db.execSQL("PRAGMA defer_foreign_keys = 1")
|
||||||
@ -136,17 +127,6 @@ abstract class TalkDatabase : RoomDatabase() {
|
|||||||
.build()
|
.build()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getCipherMigrationHook(): SQLiteDatabaseHook =
|
private fun getBytesFromChars(chars: CharArray): ByteArray = String(chars).toByteArray(Charsets.UTF_8)
|
||||||
object : SQLiteDatabaseHook {
|
|
||||||
override fun preKey(database: SQLiteDatabase) {
|
|
||||||
// unused atm
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun postKey(database: SQLiteDatabase) {
|
|
||||||
Log.i(TAG, "DB cipher_migrate START")
|
|
||||||
database.rawExecSQL("PRAGMA cipher_migrate;")
|
|
||||||
Log.i(TAG, "DB cipher_migrate END")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -143,10 +143,6 @@ public interface AppPreferences {
|
|||||||
|
|
||||||
void setDbCypherToUpgrade(boolean value);
|
void setDbCypherToUpgrade(boolean value);
|
||||||
|
|
||||||
boolean getIsDbRoomMigrated();
|
|
||||||
|
|
||||||
void setIsDbRoomMigrated(boolean value);
|
|
||||||
|
|
||||||
void setPhoneBookIntegrationLastRun(long currentTimeMillis);
|
void setPhoneBookIntegrationLastRun(long currentTimeMillis);
|
||||||
|
|
||||||
long getPhoneBookIntegrationLastRun(Long defaultValue);
|
long getPhoneBookIntegrationLastRun(Long defaultValue);
|
||||||
|
@ -388,18 +388,6 @@ class AppPreferencesImpl(val context: Context) : AppPreferences {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getIsDbRoomMigrated(): Boolean =
|
|
||||||
runBlocking {
|
|
||||||
async { readBoolean(DB_ROOM_MIGRATED).first() }
|
|
||||||
}.getCompleted()
|
|
||||||
|
|
||||||
override fun setIsDbRoomMigrated(value: Boolean) =
|
|
||||||
runBlocking<Unit> {
|
|
||||||
async {
|
|
||||||
writeBoolean(DB_ROOM_MIGRATED, value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun getShowRegularNotificationWarning(): Boolean =
|
override fun getShowRegularNotificationWarning(): Boolean =
|
||||||
runBlocking {
|
runBlocking {
|
||||||
async { readBoolean(SHOW_REGULAR_NOTIFICATION_WARNING, true).first() }
|
async { readBoolean(SHOW_REGULAR_NOTIFICATION_WARNING, true).first() }
|
||||||
|
@ -996,24 +996,6 @@ EEIhZlI/ojefaZkRseFrtl3X
|
|||||||
=pJaU
|
=pJaU
|
||||||
-----END PGP PUBLIC KEY BLOCK-----
|
-----END PGP PUBLIC KEY BLOCK-----
|
||||||
|
|
||||||
pub A6EA2E2BF22E0543
|
|
||||||
uid Tobias Warneke (for development purposes) <t.warneke@gmx.net>
|
|
||||||
|
|
||||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
|
||||||
|
|
||||||
mQGNBFJQhigBDADpuhND/VUQwJT0nnJxfjAIur59hyaZZ3Ph/KIgmCneyq7lzYO6
|
|
||||||
xa1ucH8mqNBVNLLBhs4CjihBddU/ZKTX3WnZyhQKQMZr3Tg+TCNFmAR4/hnZ3NjZ
|
|
||||||
N5N5gUj/dqVI2rIvypIuxUApl88BYMsxYpn2+8FKeMd8oBJLqFRJ3WNjB4Op2tRO
|
|
||||||
XRWoxs1ypubS/IV1zkphHHpi6VSABlTyTWu4kXEj/1/GpsdtHRa9kvdWw7yKQbnM
|
|
||||||
XuwOxtzZFJcyu0P2jYVfHHvxcjxuklc9edmCGdNxgKIoo0LXZOeFIi6OWtwzD0pn
|
|
||||||
O6ovJ+PL9QscMdnQlPwsiCwjNUNue20GBv3aUIYc+Z8Gq0SqSan5V0IiKRHMJkzd
|
|
||||||
FAhnpkSFBvHhPJn07BCcb1kctqL+xnLxIdi7arq3WNA/6bJjsojc/x3FdIvORIeP
|
|
||||||
sqejhtL8mCBvbMAMHSBrFxclMp+HSz2ouHEEPIQam0KeN8t1yEqIy3/aYKMzHj9c
|
|
||||||
C3s8XOaBCbJbKpMAEQEAAbQ9VG9iaWFzIFdhcm5la2UgKGZvciBkZXZlbG9wbWVu
|
|
||||||
dCBwdXJwb3NlcykgPHQud2FybmVrZUBnbXgubmV0Pg==
|
|
||||||
=q1C6
|
|
||||||
-----END PGP PUBLIC KEY BLOCK-----
|
|
||||||
|
|
||||||
pub A730529CA355A63E
|
pub A730529CA355A63E
|
||||||
uid Jukka Zitting <jukka@apache.org>
|
uid Jukka Zitting <jukka@apache.org>
|
||||||
|
|
||||||
@ -1401,6 +1383,8 @@ vCeonVI7Q1CkIHt8u7eMgzfEkaiPLZlI0l0RpfT4pnNieqg=
|
|||||||
-----END PGP PUBLIC KEY BLOCK-----
|
-----END PGP PUBLIC KEY BLOCK-----
|
||||||
|
|
||||||
pub BAC30622339994C4
|
pub BAC30622339994C4
|
||||||
|
uid Chris Povirk <cpovirk@google.com>
|
||||||
|
|
||||||
sub FC9BDC25FB378008
|
sub FC9BDC25FB378008
|
||||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||||
|
|
||||||
@ -1409,20 +1393,21 @@ Gyoc9ZmChrhLoim7z4ILqmNo8eegknepQ3dGdUij4NVIhR+m+8irayTbsNHvo3UG
|
|||||||
9y7eM5tTSjyNYkyk5fAVuT7OhzIzMA+qtc3GRVxNYRKnaHajt+pOSqr+uoDtMG3n
|
9y7eM5tTSjyNYkyk5fAVuT7OhzIzMA+qtc3GRVxNYRKnaHajt+pOSqr+uoDtMG3n
|
||||||
6eAMHCAnhgh5Nd+dCFcNT+syl3zCwolA1wrzGxxOaif+xi5wwXjmF/lAt4PDIuDT
|
6eAMHCAnhgh5Nd+dCFcNT+syl3zCwolA1wrzGxxOaif+xi5wwXjmF/lAt4PDIuDT
|
||||||
etA2/AqPM4zAC0BtC0iqVgVypjFV3EAexm/g0LNMiG/M/krzwjPq5gf1DY/57jU0
|
etA2/AqPM4zAC0BtC0iqVgVypjFV3EAexm/g0LNMiG/M/krzwjPq5gf1DY/57jU0
|
||||||
02FpKd79HmR7bHdc4e2olEf9NlHxfbPXDDsHABEBAAG5AQ0EWUwTFgEIANmMpV3N
|
02FpKd79HmR7bHdc4e2olEf9NlHxfbPXDDsHABEBAAG0IUNocmlzIFBvdmlyayA8
|
||||||
K8aLrLgQTyh5++det8C3D3T5tkEdljHOuN31/qdKNge8H6uKH8zXRZsj5pd8adpW
|
Y3Bvdmlya0Bnb29nbGUuY29tPrkBDQRZTBMWAQgA2YylXc0rxousuBBPKHn75163
|
||||||
kD4TzIMvzIwzizsGw34O9hf1E2XPoDqvQr39p1sovX3PeDvRJY/7JFNt9DsphVc3
|
wLcPdPm2QR2WMc643fX+p0o2B7wfq4ofzNdFmyPml3xp2laQPhPMgy/MjDOLOwbD
|
||||||
xWQfNkC7JdMPa6JRiFHd3ynfbQ+wplf4tfaDVn1JXAWp0NSGgMtXfn5i19hHQWjm
|
fg72F/UTZc+gOq9Cvf2nWyi9fc94O9Elj/skU230OymFVzfFZB82QLsl0w9rolGI
|
||||||
RNAKNQLdVn8UczI8XdVM7bS4giDpQMukSyjsjgAo466iRK2+8f8BwIRe1JRvF37B
|
Ud3fKd9tD7CmV/i19oNWfUlcBanQ1IaAy1d+fmLX2EdBaOZE0Ao1At1WfxRzMjxd
|
||||||
dnbvTg/dzoi1/E4ukwVJD6YE2LlDwzdGno9KxPlRsuY3nnheVgjbrGJ2XKRJkIk8
|
1UzttLiCIOlAy6RLKOyOACjjrqJErb7x/wHAhF7UlG8XfsF2du9OD93OiLX8Ti6T
|
||||||
7cMGh41VKw6L4usAEQEAAYkBHwQYAQIACQUCWUwTFgIbDAAKCRC6wwYiM5mUxEiH
|
BUkPpgTYuUPDN0aej0rE+VGy5jeeeF5WCNusYnZcpEmQiTztwwaHjVUrDovi6wAR
|
||||||
CACQViGOHi0BoZ78ZJz6L48YNMx8fSdSv3YJ83Ih1n5DWCJgrDV5S3/edYinkoVI
|
AQABiQEfBBgBAgAJBQJZTBMWAhsMAAoJELrDBiIzmZTESIcIAJBWIY4eLQGhnvxk
|
||||||
0Lusy3MdftRg6OWaYOuOTf6MYcddO/mY363jiMByf9Uh3Dqq4sKqVLRnZbAqgD1o
|
nPovjxg0zHx9J1K/dgnzciHWfkNYImCsNXlLf951iKeShUjQu6zLcx1+1GDo5Zpg
|
||||||
dRoj2NkEQfgEH/H4JRVrxquzAKoWwJh3MhY+kajYJRJyWfc1/Bm3Bj1tcMGlGeIQ
|
645N/oxhx107+ZjfreOIwHJ/1SHcOqriwqpUtGdlsCqAPWh1GiPY2QRB+AQf8fgl
|
||||||
fgWheeMg3kxrxJ9TXPqVi6VVPaPKIU5i8l46S+Wg3uvMs8vC3XzOIvhY6cwguJv9
|
FWvGq7MAqhbAmHcyFj6RqNglEnJZ9zX8GbcGPW1wwaUZ4hB+BaF54yDeTGvEn1Nc
|
||||||
UkjZwGDSI952wLqnREMy0gFZ+OAB0qJpYM3nDEekWZP38G80kojnN61tZjRThu9I
|
+pWLpVU9o8ohTmLyXjpL5aDe68yzy8LdfM4i+FjpzCC4m/1SSNnAYNIj3nbAuqdE
|
||||||
i8/b+PwSW+nW3EpQZdLqZtOU
|
QzLSAVn44AHSomlgzecMR6RZk/fwbzSSiOc3rW1mNFOG70iLz9v4/BJb6dbcSlBl
|
||||||
=2H2i
|
0upm05Q=
|
||||||
|
=Gf3Y
|
||||||
-----END PGP PUBLIC KEY BLOCK-----
|
-----END PGP PUBLIC KEY BLOCK-----
|
||||||
|
|
||||||
pub BCF4173966770193
|
pub BCF4173966770193
|
||||||
@ -1451,15 +1436,18 @@ IaddzrPZPmaZ8CtzzyB7+JdSNItBB2Sp
|
|||||||
-----END PGP PUBLIC KEY BLOCK-----
|
-----END PGP PUBLIC KEY BLOCK-----
|
||||||
|
|
||||||
pub BDD2A76422470515
|
pub BDD2A76422470515
|
||||||
|
uid Dave Brosius <dbrosius@mebigfatguy.com>
|
||||||
|
|
||||||
sub 0C77E993AC36C97C
|
sub 0C77E993AC36C97C
|
||||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||||
|
|
||||||
mDMEaDypvxYJKwYBBAHaRw8BAQdAv3OEFRIQWBhSii0M3S9P3eGlZLalGY9smzBQ
|
mDMEaDypvxYJKwYBBAHaRw8BAQdAv3OEFRIQWBhSii0M3S9P3eGlZLalGY9smzBQ
|
||||||
C0aiVXW4OARoPKm/EgorBgEEAZdVAQUBAQdA2THBTS3MqZPdTuKmc7QkAvlvwmJa
|
C0aiVXW0J0RhdmUgQnJvc2l1cyA8ZGJyb3NpdXNAbWViaWdmYXRndXkuY29tPrg4
|
||||||
WEQsXXqkjQdEwD4DAQgHiH4EGBYKACYWIQSu/rh4kM398rwIxKq90qdkIkcFFQUC
|
BGg8qb8SCisGAQQBl1UBBQEBB0DZMcFNLcypk91O4qZztCQC+W/CYlpYRCxdeqSN
|
||||||
aDypvwIbDAUJBaOagAAKCRC90qdkIkcFFfyUAPsGJcpKQP2/sQe+XN69rVZMFXhk
|
B0TAPgMBCAeIfgQYFgoAJhYhBK7+uHiQzf3yvAjEqr3Sp2QiRwUVBQJoPKm/AhsM
|
||||||
dYg0U9EhpY/7GHDpHQD+J5Uy2s3USLxeyIylXUFWtxqOocB+vZhvH3Yhmjhwmgw=
|
BQkFo5qAAAoJEL3Sp2QiRwUV/JQA+wYlykpA/b+xB75c3r2tVkwVeGR1iDRT0SGl
|
||||||
=zAHg
|
j/sYcOkdAP4nlTLazdRIvF7IjKVdQVa3Go6hwH69mG8fdiGaOHCaDA==
|
||||||
|
=wcNA
|
||||||
-----END PGP PUBLIC KEY BLOCK-----
|
-----END PGP PUBLIC KEY BLOCK-----
|
||||||
|
|
||||||
pub BEDE11EAF1164480
|
pub BEDE11EAF1164480
|
||||||
@ -3731,50 +3719,6 @@ pIXjPlQ0i6kV0h8KapE1Uo005JYgeg==
|
|||||||
=ASmD
|
=ASmD
|
||||||
-----END PGP PUBLIC KEY BLOCK-----
|
-----END PGP PUBLIC KEY BLOCK-----
|
||||||
|
|
||||||
pub 1DE461528F1F1B2A
|
|
||||||
uid Julian Reschke (CODE SIGNING KEY) <reschke@apache.org>
|
|
||||||
|
|
||||||
sub D4569BDF799A59AB
|
|
||||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
|
||||||
|
|
||||||
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
|
|
||||||
ZAstgdvEqFLHh1yX4I+if5VODD2nEzXFDzE=
|
|
||||||
=d5S6
|
|
||||||
-----END PGP PUBLIC KEY BLOCK-----
|
|
||||||
|
|
||||||
pub 1F7A8F87B9D8F501
|
pub 1F7A8F87B9D8F501
|
||||||
uid Download <download@jetbrains.com>
|
uid Download <download@jetbrains.com>
|
||||||
|
|
||||||
@ -6270,8 +6214,6 @@ c8LNGrDaCFdXnOdlNV/zT9VvBk/RkV+Tl/Lk4g==
|
|||||||
-----END PGP PUBLIC KEY BLOCK-----
|
-----END PGP PUBLIC KEY BLOCK-----
|
||||||
|
|
||||||
pub 7905DE25C78AD456
|
pub 7905DE25C78AD456
|
||||||
uid Protobuf Release <protobuf@googlegroups.com>
|
|
||||||
|
|
||||||
sub DBC5123E2E98FEFE
|
sub DBC5123E2E98FEFE
|
||||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||||
|
|
||||||
@ -6283,26 +6225,25 @@ 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
|
=UiVm
|
||||||
=z4dc
|
|
||||||
-----END PGP PUBLIC KEY BLOCK-----
|
-----END PGP PUBLIC KEY BLOCK-----
|
||||||
|
|
||||||
pub 793FD5751A0F0780
|
pub 793FD5751A0F0780
|
||||||
|
@ -161,7 +161,10 @@
|
|||||||
<trusting group="ch.qos.logback"/>
|
<trusting group="ch.qos.logback"/>
|
||||||
<trusting group="org.slf4j"/>
|
<trusting group="org.slf4j"/>
|
||||||
</trusted-key>
|
</trusted-key>
|
||||||
<trusted-key id="61DEBD732F3F07771269972E2F87304808D40CEC" group="net.zetetic" name="android-database-sqlcipher" version="4.5.4"/>
|
<trusted-key id="61DEBD732F3F07771269972E2F87304808D40CEC">
|
||||||
|
<trusting name="android-database-sqlcipher" group="net.zetetic" version="4.5.4"/>
|
||||||
|
<trusting name="sqlcipher-android" group="net.zetetic" version="4.9.0"/>
|
||||||
|
</trusted-key>
|
||||||
<trusted-key id="64B9B09F164AA0BF88742EB61188B69F6D6259CA" group="com.google.accompanist"/>
|
<trusted-key id="64B9B09F164AA0BF88742EB61188B69F6D6259CA" group="com.google.accompanist"/>
|
||||||
<trusted-key id="666A4692CE11B7B3F4EB7B3410066A9707090CF9" group="org.javassist" name="javassist" version="3.26.0-GA"/>
|
<trusted-key id="666A4692CE11B7B3F4EB7B3410066A9707090CF9" group="org.javassist" name="javassist" version="3.26.0-GA"/>
|
||||||
<trusted-key id="694621A7227D8D5289699830ABE9F3126BB741C1" group="^com[.]google($|([.].*))" regex="true"/>
|
<trusted-key id="694621A7227D8D5289699830ABE9F3126BB741C1" group="^com[.]google($|([.].*))" regex="true"/>
|
||||||
|
Loading…
Reference in New Issue
Block a user