ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Android] TargetSdkVersion 34 업그레이드
    ▶︎ Android/react-native 2025. 6. 2. 16:53
    반응형

     

    작업 이유

    바뀐 안드로이드 지침에따라, TargetSdkVersion34로 업그레이드 작업이 필요하였습니다.

     


    수정된 코드 (old, new로 표시함)

     

    ▼ ‎android/build.gradle

    buildscript {
        ext {
            compileSdkVersion = 33
            buildToolsVersion = "30.0.3"
            minSdkVersion = 25 //24
            targetSdkVersion = 34 //new
          //targetSdkVersion = 33 //old
            ndkVersion = "23.1.7779620"
        }
        repositories {
            google()
            jcenter()
            mavenCentral() //new
        }
        dependencies {classpath 'com.android.tools.build:gradle:3.5.4'}
    }
    
    allprojects {
        repositories {
            google()
            jcenter()
            mavenCentral() //new
            maven { url 'https://www.jitpack.io' }
            maven { url 'https://repo1.maven.org/maven2' }
        }
    }

     

    ▼ ‎android/gradle.properties

    android.useAndroidX=true
    android.enableJetifier=true
    
    //FLIPPER_VERSION=0.33.1 //old
    
    MYAPP_RELEASE_STORE_FILE=daram.keystore
    MYAPP_RELEASE_KEY_ALIAS=daram
    MYAPP_RELEASE_STORE_PASSWORD=daram
    MYAPP_RELEASE_KEY_PASSWORD=daram

     

    ▼ ‎android/app/build.gradle

    모든 flipper, fresco 관련코드 제거

     

    ‎android/app/src/debug/java/com/daramapp/ReactNativeFlipper.java
    ReactNativeFlipper.java 파일제거

     

    android/app/src/main/AndroidManifest.xml

    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.daram.inhouse.daram">
    
        <uses-permission android:name="android.permission.INTERNET" />
        <uses-permission android:name="android.permission.CAMERA" />
        <uses-permission android:name="android.permission.USE_FINGERPRINT" />
    
        <!-- targetSDK 32 / andoid 12 이하 적용 -->
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="32"/>  
        <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="32"/>    
    
        <!-- targetSDK 33 / andoid 13 이하 적용 -->
        <uses-permission android:name="android.permission.READ_MEDIA_IMAGES"/>  
        <uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />  
        <uses-permission android:name="android.permission.READ_MEDIA_AUDIO" />  
    
        <!-- targetSDK 34 / andoid 14 이하 적용 -->
        <uses-permission android:name="android.permission.READ_MEDIA_VISUAL_USER_SELECTED" /> //new
    
        <uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
    
        <application
          android:name=".MainApplication"
          android:label="@string/app_name"
          android:icon="@mipmap/ic_launcher"
          android:roundIcon="@mipmap/ic_launcher_round"
          android:allowBackup="false"
          android:usesCleartextTraffic="true"
          android:requestLegacyExternalStorage="true"
          android:theme="@style/AppTheme">
    
    //new_start
          <receiver 
            android:name=".YourBroadcastReceiver"
            android:exported="true"> <!-- 또는 false -->
            <intent-filter>
                <action android:name="com.daramapp.SOME_ACTION" />
            </intent-filter>
          </receiver> 
    //new_end
          
        </application>
    
    </manifest>

     

    ▼ android/app/src/main/java/com/daramapp/MainApplication.java

    package com.daram.inhouse.daram;
    
    import android.app.Application;
    import android.content.Context;
    
    //new_start
    import android.content.BroadcastReceiver;
    import android.content.Intent;
    import android.content.IntentFilter;
    import android.os.Build;
    import androidx.annotation.Nullable; // 또는 // import javax.annotation.Nullable; // 둘 중 하나 사용
    //new_end
    
    import com.facebook.react.PackageList;
    import com.facebook.react.ReactApplication;
    import com.facebook.react.ReactInstanceManager;
    import com.facebook.react.ReactNativeHost;
    import com.facebook.react.ReactPackage;
    import com.facebook.soloader.SoLoader;
    import java.lang.reflect.InvocationTargetException;
    import java.util.List;
    
    public class MainApplication extends Application implements ReactApplication {
    
    //new_start
      @Override
      public Intent registerReceiver(@Nullable BroadcastReceiver receiver, IntentFilter filter) {
        if (Build.VERSION.SDK_INT >= 34 && getApplicationInfo().targetSdkVersion >= 34) {
            return super.registerReceiver(receiver, filter, Context.RECEIVER_EXPORTED);
        } else {
            return super.registerReceiver(receiver, filter);
        }
      }
    //new_end
    
    }

     

    ▼ android/gradle/wrapper/gradle-wrapper.properties

    distributionBase=GRADLE_USER_HOME
    distributionPath=wrapper/dists
    # distributionUrl=https\://services.gradle.org/distributions/gradle-6.2.1-all.zip #old
    distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-all.zip #new
    
    zipStoreBase=GRADLE_USER_HOME
    zipStorePath=wrapper/dists

     

     

     

    반응형
Designed by Tistory.