android - 在 react-native 中更改为 androidX
问题描述
我正在尝试将我的react-native
项目更改为androidx
. 我想这样做是因为在尝试运行我的项目时突然出现此错误:
com.android.build.api.transform.TransformException: Error while generating the main dex list.
我正在阅读有关该问题的一些帖子,并尝试添加这些行:
android.useAndroidX=true
android.enableJetifier=true
因为当我使用堆栈跟踪时,我收到了这个错误:
Program type already present: androidx.versionedparcelable.CustomVersionedParcelable react native
我将此行添加到我的local.propeties
文件中,但是当我这样做时,我发现我需要更改所有node-module
文件以使用androidx
此外,我试图将包更新react-native-device-info
到最新版本 2.1.2 但仍然是相同的结果......
我的反应原生版本:
react-native-cli: 2.0.1
react-native: 0.50.4
我附上我的文件:
应用程序/build.gradle:
apply plugin: "com.android.application"
buildscript {
repositories {
maven { url 'https://maven.fabric.io/public' }
}
dependencies {
// The Fabric Gradle plugin uses an open ended version to react
// quickly to Android tooling updates
classpath 'io.fabric.tools:gradle:1.+'
}
}
apply plugin: 'io.fabric'
repositories {
maven { url 'https://maven.fabric.io/public' }
}
import com.android.build.OutputFile
project.ext.react = [
entryFile: "index.js"
]
apply from: "../../node_modules/react-native/react.gradle"
def enableSeparateBuildPerCPUArchitecture = false
def enableProguardInReleaseBuilds = false
android {
compileSdkVersion 28
buildToolsVersion "28.0.3"
dexOptions {
javaMaxHeapSize "4g"
}
defaultConfig {
applicationId "com.x"
minSdkVersion 19
targetSdkVersion 26
versionCode 14
versionName "2.3.0"
multiDexEnabled true
ndk {
abiFilters "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
}
}
}
splits {
abi {
reset()
enable enableSeparateBuildPerCPUArchitecture
universalApk false // If true, also generate a universal APK
include "armeabi-v7a", "x86"
}
}
buildTypes {
release {
signingConfig signingConfigs.release
minifyEnabled 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
}
}
}
}
dependencies {
compile project(':react-native-orientation')
compile project(':react-native-device-information')
compile project(':react-native-ble-manager')
compile project(':react-native-fabric')
compile project(':react-native-vector-icons')
compile project(':react-native-spinkit')
compile project(':react-native-push-notification')
compile project(':react-native-picker')
compile project(':react-native-linear-gradient')
compile project(':react-native-image-crop-picker')
compile project(':react-native-firebase')
compile project(':react-native-fcm')
compile project(':react-native-config')
implementation project(':react-native-picker')
implementation project(':react-native-device-info')
implementation project(':react-native-fcm')
implementation project(':react-native-firebase')
implementation project(':react-native-svg')
implementation project(':react-native-vector-icons')
implementation project(':react-native-spinkit')
implementation project(':react-native-push-notification')
implementation project(':react-native-linear-gradient')
implementation project(':react-native-image-crop-picker')
implementation project(':react-native-config')
implementation project(':react-native-picker-module')
implementation fileTree(dir: "libs", include: ["*.jar"])
implementation "com.google.android.gms:play-services-gcm:15.0.1"
implementation "com.android.support:appcompat-v7:28.0.0-rc02"
implementation "com.facebook.react:react-native:+" // From node_modules
implementation 'com.google.firebase:firebase-core:16.0.1'
implementation 'com.google.firebase:firebase-messaging:17.0.0' //17.3.1
implementation 'com.android.support:multidex:1.0.3'
//implementation 'com.google.firebase:firebase-notifications'
compile('com.crashlytics.sdk.android:crashlytics:2.9.2@aar') {
transitive = true;
}
}
// Run this once to be able to run the application with BUCK
// puts all compile dependencies into folder libs for BUCK to use
task copyDownloadableDepsToLibs(type: Copy) {
from configurations.compile
into 'libs'
}
apply plugin: 'com.google.gms.google-services'
com.google.gms.googleservices.GoogleServicesPlugin.config.disableVersionCheck = true
安卓/build.gradle
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.2.1'
classpath 'com.google.gms:google-services:4.1.0'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
//com.android.ddmlib.DdmPreferences.setTimeOut(50000)
allprojects {
repositories {
// Add jitpack repository (added by react-native-spinkit)
maven { url "https://jitpack.io" }
mavenLocal()
google()
jcenter()
// maven{
// url 'https://maven.google.com'
// }
maven {
// All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
url "$rootDir/../node_modules/react-native/android"
}
}
}
ext {
compileSdkVersion = 28
targetSdkVersion = 28
buildToolsVersion = "28.0.3"
supportLibVersion = "28.0.0-rc02"
googlePlayServicesVersion = "15.0.1"
oreoEXPERIMENTAL = "yes"
}
subprojects {
afterEvaluate {project ->
if (project.hasProperty("android")) {
android {
compileSdkVersion 28
buildToolsVersion '28.0.3'
}
}
}
}
我的androidManifest.xml应用程序:
<application
android:name=".MainApplication"
android:allowBackup="true"
android:label="@string/app_name"
android:icon="@mipmap/ic_launcher"
android:theme="@style/AppTheme"
tools:replace="android:appComponentFactory"
android:appComponentFactory="whateverString"
>
现在有什么办法可以解决这个问题吗?我突然无法运行我的项目
解决方案
这些行为android/app/build.gradle
我修复了它(基于此 GitHub 评论)。 react-native-push-notification
依赖于导致失败的 androidx。
implementation(project(':react-native-push-notification')) {
exclude group: 'com.google.android.gms'
}
implementation ("com.google.android.gms:play-services-gcm:16.1.0") {
force = true
}
implementation ("com.google.android.gms:play-services-base:16.1.0") {
force = true
}
implementation ("com.google.firebase:firebase-core:16.0.9") {
force = true
}
implementation ("com.google.firebase:firebase-messaging:18.0.0") {
force = true
}
如果您还没有react-native-push-notification
依赖项,则可以检查您的 androidx 依赖项所在的位置:
cd android && ./gradlew app:dependencies
(有关该方法的更多详细信息,请参阅此评论。)
推荐阅读
- frameworks - 在布尔玛改变方向到 rtl 的问题
- modelica - 如何在 Modelica 中将多维组件与多维连接器连接起来?
- c# - 初始化 C# Visual Studio Windows 窗体应用程序后,如何更改窗体的视觉效果?
- python - 获取 TypeError:需要一个类似字节的对象,而不是客户端启动时的“str”
- docker - 没有 Docker 的 Nginx 连接到 docker 容器(clojure)
- regex - 如何使用正则表达式在源代码中查找未注释的命令
- c++ - 如何使用 WinSock2 库计算 UDP 传输的最大数据包大小?
- button - SwiftUI:调整文本大小以适合按钮
- powershell - Powershell 防弹异常处理
- django - 在 django 中从数据库中删除数据