'Android'에 해당되는 글 62건
- 2022.11.24 [링크] [Unity] 안드로이드 플러그인 (Android Plugin JAR, AAR)
- 2022.11.24 [빌드에러/Android] java.lang.UnsupportedOperationException: This feature requires ASM7 (with GoogleMobileAds)
- 2022.11.16 [Tip] Android 12(API 31)에서 멀티윈도우/팝업윈도우 차단하기(꼼수)
- 2022.11.15 [펌] How can I disable multiwindow mode for an Activity in Android N+
- 2022.10.20 [Android][빌드에러] Exception: OBSOLETE - Providing Android resources in Assets/Plugins/Android/res was removed
- 2022.09.07 [Unity][Android][RuntimeError] Targeting S+ (version 31 and above) requires that one of FLAG_IMMUTABLE or FLAG_MUTABLE be specified when creating a PendingIntent.
- 2022.08.16 [링크] [Unity] 유니티에서 빌드한 apk가 블루스택에서 실행되지 않는 문제 해결
- 2022.06.28 [빌드에러][Android] UnityException: Error mainTemplate.gradle file is using the old aaptOptions noCompress property definition which does not include types defined by unityStreamingAssets constant.
- 2021.07.06 [Crash/Android] Caused by java.lang.Error signal 11 (SIGSEGV), code 1 (SEGV_MAPERR)
- 2021.03.12 [펌] Failed to update Android SDK Package List
[빌드에러/Android] java.lang.UnsupportedOperationException: This feature requires ASM7 (with GoogleMobileAds)
Untiy 2021.3.14f1
GoogleMobileAds 7.3.0
----
Unity 2021로 엔진 업데이트를 하고 빌드해보려는데 에러가 나서 보니 GoogleMobileAds 7.3.0 관련 이슈인 것 같다.
(GoogleMobileAds 7.2.0은 빌드 잘됨)
검색해보니 아래와 같은 해결책이 나온다.
- 간단히 말하면 Unity 2021에서 GoogleMobileAds 7.3.0을 쓰려면 gradle 버전 업데이트 하라고 한다. (아래 내용 따라하라고 함)
- 그래서 난 일단 GoogleMobileAds 7.2.0으로 버전을 내렸다(?)
--------------------------------------------------------------------------------------------------------------------------------
Yo so I found a way to solve this, assuming you are using applovin or charboost , what I did was:
- Delete resolved libraries : Assets> External Dependancy Manager > Android resolver > Delete resolve libs
- in player settings > pulishing settings uncheck all the one under build
- Download gradle 6.9
- Prefrences > external tools > uncheck gradle and browse to the installed gradle
- Assets> External Dependancy Manager > Android resolver > Force resolve
- then player settings > pulishing settings check all the ones you uncheck plus Custom Base Gradle Template
- edit the file Asstes\Plugins\Android\baseProjectTemplate.gradle
- change target api level to 31
- change the line that looks like classpath 'com.android.tools.build:gradle:yourversion' to classpath 'com.android.tools.build:gradle:4.2.0'
Build now it works. the funny thing is that gradle is 6.9 and com.adroid.tools.build:gradle: is 4.2.0 but it works.
[출처] https://www.reddit.com/r/Unity3D/comments/tktc13/i_need_help_asap/
--------------------------------------------------------------------------------------------------------------------------------
Hello. I solved my problem this way.
Download the latest Gradle version here.
https://gradle.org/releases/
Place the unzipped Gradle file in the following location
/Applications/Unity/Hub/Editor/2021.3.12f1/PlaybackEngines/AndroidPlayer/Tools/gradle/
Please note that 2021.3.12f1 is the editor version and should be replaced with your own environment.
Next, open Unity and change the Gradle to be used.
From the top menu, select Unity > Preferences and open External Tools.
Uncheck the box marked "Gradle Installed with Unity (recommended)" and enter the path to the Gradle you just placed.
Now the Gradle used for building has been switched to a different version.
If there are no problems with the version, you should now be able to build Android.
[출처] https://github.com/googleads/googleads-mobile-unity/issues/2390
'Unity3D > Android' 카테고리의 다른 글
[Tip] Android 12(API 31)에서 멀티윈도우/팝업윈도우 차단하기(꼼수)
Android 7(API 24) 이상에서 지원하는 멀티 윈도우를 막으려면 AndroidManifest.xml에 android:resizeableActivity="false"만 추가하면 됐는데,
위 방식은 API 30까지만 가능하고 API 31(Android 12)부터는 화면이 크면 경고는 뜨지만 막히지 않는다.
[참조] https://blueasa.tistory.com/2669
[참조2] https://developer.android.com/guide/topics/large-screens/multi-window-support
그래서 약간 꼼수로 아래와 같이 처리했다.
[차단]
멀티윈도우/팝업윈도우로 갈 때 OnApplicationPause가 작동하기 때문에, OnApplicationPause에서 false 일 때(Pause가 풀릴 때) , Screen의 현재 해상도를 체크해서 내가 사용하는 게임 비율이 아니면 차단하게 함.
Ex) 가로모드 게임이면, height가 width보다 크면 차단
[해제]
멀티윈도우/팝업윈도우에서 정상적인 전체화면 게임으로 돌아와도 OnApplicationPause가 Call 되지 않기 때문에 여기서 처리는 불가능한 걸 확인했다.
그래서 [차단] 할 때, InvokeRepeating을 사용해서 주기적으로 체크(Update를 쓰면 평소에도 Call 되기 때문에 Invoke 사용함)해서 해상도가 내가 사용하는 비율이 맞으면 해제하도록 해놓음.
Ex) 가로모드 게임이면, width가 height보다 크먼 해제
대충 아래와같이 구현해 둠..
void OnApplicationPause(bool _bPaused)
{
Debug.LogFormat("[OnApplicationPause] {0}", _bPaused);
// Android에서만 처리하기 위해 Define으로 분기
#if !UNITY_EDITOR && UNITY_ANDROID
OnApplicationPause_Android(_bPaused);
#elif !UNITY_EDITOR && UNITY_IOS
#endif
}
void OnApplicationPause_Android(bool _bPaused)
{
// Pause 할 때는 Pass
if (true == _bPaused)
return;
// [Android12(API31) 멀티윈도우 차단
// Pause 해제 시, 해상도 세로가 가로보다 더 길면 차단(가로모드 게임)
if (Screen.currentResolution.width <= Screen.currentResolution.height)
{
// [Active] UnSupported Resolution Popup
// (화면을 완전히 가리고, 터치가 안되도록 Collider를 넣음)
ActivateUnsupportedResolutionPopup(true);
// 차단 해제 체크용(Update는 항상 돌기 때문에 Invoke로 필요할때만 처리)
InvokeRepeating("UpdateCheckUnSupportedResolution", 0.1f, 0.1f);
}
}
void UpdateCheckUnSupportedResolution()
{
// 해상도가 가로모드 해상도에 맞게 돌아오면 차단 팝업 해제 및 CancelInvoke
if (Screen.currentResolution.height < Screen.currentResolution.width)
{
// [InActive] UnSupported Resolution Popup
SGT.UIMain.ActivateUnSupportedResolutionPopup(false);
CancelInvoke("UpdateCheckUnSupportedResolution");
}
}
'Unity3D > Android' 카테고리의 다른 글
[펌] How can I disable multiwindow mode for an Activity in Android N+
In your manifest, you need:
android:resizeableActivity="false"
So in your manifest file, for each activity that you want to disable the feature in, it would be like:
<activity android:name=".SomeActivity"
android:label="@string/app_name"
android:resizeableActivity="false" />
Or, if you want to disable it in your entire app:
<application
android:resizeableActivity="false" >
. . .
</application>
As for what will happen, Android just won't let your app go into multi-screen mode - it will just stay full screen. See https://developer.android.com/preview/features/multi-window.html and https://developer.android.com/guide/topics/manifest/activity-element.html#resizeableActivity.
[참조] https://50billion-dollars.tistory.com/entry/Android-%EB%8B%A4%EC%A4%91-%EC%B0%BD-%EB%A7%89%EA%B8%B0
[추가] API 31이상, 큰 화면(sw >= 600dp)에서는 Multi Window가 막히지 않는 것 같다.(경고는 뜸)
resizeableActivity
매니페스트의 <activity> 또는 <application> 요소에서 이 속성을 설정하여 API 수준 30 이하에서 멀티 윈도우 모드를 사용 설정하거나 사용 중지할 수 있습니다.
<application
android:name=".MyActivity"
android:resizeableActivity=["true" | "false"] />
이 속성을 true로 설정하면, 활동을 화면 분할 모드와 자유 형식 모드로 시작할 수 있습니다. 이 속성을 false로 설정하면, 활동이 멀티 윈도우 모드를 지원하지 않습니다. 이 값이 false일 때 사용자가 멀티 윈도우 모드로 활동을 시작하려고 하면 활동은 전체 화면으로 열립니다.
앱이 API 수준 24 이상을 타겟팅하지만 이 속성 값을 지정하지 않은 경우 이 속성의 기본값은 true가 됩니다.
앱이 API 수준 31 이상을 타겟팅하는 경우 이 속성은 작은 화면 및 큰 화면에서 다르게 작동합니다.
- 큰 화면(sw >= 600dp): 모든 앱이 멀티 윈도우 모드를 지원합니다. 이 속성은 활동의 크기를 조절할 수 있는지 여부를 나타냅니다. resizeableActivity="false"인 경우 디스플레이 치수를 준수하기 위해 필요한 경우 앱이 호환성 모드로 전환됩니다.
- 작은 화면(sw < 600dp): resizeableActivity="true" 및 활동 최소 너비 및 최소 높이가 멀티 윈도우 요구사항 내에 있는 경우 활동은 멀티 윈도우 모드를 지원합니다. resizeableActivity="false"인 경우 활동이 최소 너비 및 높이와 관계없이 멀티 윈도우 모드를 지원하지 않습니다.
[참조] https://developer.android.com/guide/topics/large-screens/multi-window-support
'Unity3D > Android' 카테고리의 다른 글
[Android][빌드에러] Exception: OBSOLETE - Providing Android resources in Assets/Plugins/Android/res was removed
Unity 2021.3.11f1
I2 Localization(app_name 로컬라이징 용도)
I2 Localization 에셋으로 app_name Localization을 하고 있었는데,
Unity 2021.3.11f1으로 업데이트 한 후에 Android에서 로컬라이징이 되지 않고 기본 설정된 App Name만 나오는 문제가 생겼다.
(대충 검색해보니 Unity 2021.3부터 나오는 이슈 같다)
그래서 생성된 res 폴더를 ../Assets/Plugins/Android/ 하위에 직접 넣고 빌드해보니 아래와 같은 에러가 나온다.
Exception: OBSOLETE - Providing Android resources in Assets/Plugins/Android/res was removed, please move your resources to an AAR or an Android Library. See "AAR plug-ins and Android Libraries" section of the Manual for more details.
UnityEditor.Android.PostProcessor.Tasks.CheckUserResources.Execute (UnityEditor.Android.PostProcessor.PostProcessorContext context) (at <5e58a3838afa4e88a08dc92f05003dcc>:0)
UnityEditor.Android.PostProcessor.PostProcessRunner.RunAllTasks (UnityEditor.Android.PostProcessor.PostProcessorContext context) (at <5e58a3838afa4e88a08dc92f05003dcc>:0)
UnityEditor.Android.PostProcessAndroidPlayer.PrepareForBuild (UnityEditor.BuildOptions options, UnityEditor.BuildTarget target) (at <5e58a3838afa4e88a08dc92f05003dcc>:0)
UnityEditor.Android.AndroidBuildPostprocessor.PrepareForBuild (UnityEditor.BuildOptions options, UnityEditor.BuildTarget target) (at <5e58a3838afa4e88a08dc92f05003dcc>:0)
UnityEditor.PostprocessBuildPlayer.PrepareForBuild (UnityEditor.BuildOptions options, UnityEditor.BuildTargetGroup targetGroup, UnityEditor.BuildTarget target) (at <4e64905d831f4883a53259ef37fb023b>:0)
UnityEngine.GUIUtility:ProcessEvent(Int32, IntPtr, Boolean&)
app_name 로컬라이징에 사용되던 /res/ 폴더 하위에 넣는 방식을 Unity 2021.3 이후에는 더이상 지원하지 않나보다.
그래서 검색해보니 아래 링크에 해결방법이 적혀있다.
[링크] https://develop.hateblo.jp/entry/android-res-error
해결방법은 링크의 res.androidlib 폴더를 만드는 방법을 참조하면 된다.
링크의 xml 파일등이 띄어쓰기등이 좀 문제 있어서 겸사겸사 간단히 요약해서 적어 둠.
[해결방법]
1. ../Assets/Plugins/Android/ 하위에 res.androidlib 폴더 생성
2. res.androidlib 폴더에 아래 파일을 다운받아서 추가하거나 AndroidManifest.xml 파일 직접 생성해서 입력
[참조] AndroidManifest.xml 파일 내용
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="custom.android.res" android:versionCode="1" android:versionName="1.0">
</manifest>
2. res.androidlib 폴더에 아래 파일을 다운받아서 추가하거나 project.properties 파일 직접 생성해서 입력
[참조] project.properties 파일 내용
target=android-9
android.library=true
3. 기존에 있던 res 폴더(하위에 values/values-en/values-ko 등 포함)를 res.androidlib 폴더로 이동
4. 위의 순서 진행하면 아래와 같이 된다.
5. 이제 빌드 하면.. 된다!!
[참조] [Unity] 안드로이드 국가별 앱 이름 변경
[참조] Unity Android 빌드 후 국가별(언어별) 앱 이름 대응
'Unity3D > Trouble Shooting' 카테고리의 다른 글
[Unity][Android][RuntimeError] Targeting S+ (version 31 and above) requires that one of FLAG_IMMUTABLE or FLAG_MUTABLE be specified when creating a PendingIntent.
[사용엔진] Unity 2020.3.37f1
-------------------------------------------------------------------------------------------
[추가]
Push 관련해서 같은 에러가 나서 확인해보니 아래 링크와 같은 처리를 요구하고 있다.
1. Android 12 이상에 대해서 PendingIntent 를 PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE 추가
2. AndroidManifest.xml SCHEDULE_EXACT_ALARM 퍼미션 추가
<uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM" />
>> 1.2. 둘다 처리가 필요할 듯 하다.
[참조] https://github.com/radishmedia/react-native-push-notification/pull/19
-------------------------------------------------------------------------------------------
구글에서 API 31을 쓰라고 해서 Target API를 31로 올리고 빌드 했는데,
실행은 되지만 최신 폰(좀 안좋은 폰은 정상)에서 실행 중 아래와 같은 에러메시지를 띄우면서 크래시가 남.
----
AndroidJavaException: java.lang.IllegalArgumentException: com.xxx.xxx.xxx: Targeting S+ (version 31 and above) requires that one of FLAG_IMMUTABLE or FLAG_MUTABLE be specified when creating a PendingIntent.
Strongly consider using FLAG_IMMUTABLE, only use FLAG_MUTABLE if some functionality depends on the PendingIntent being mutable, e.g. if it needs to be used with inline replies or bubbles.
java.lang.IllegalArgumentException: com.xxx.xxx.xxx: Targeting S+ (version 31 and above) requires that one of FLAG_IMMUTABLE or FLAG_MUTABLE be specified when creating a PendingIntent.
Strongly consider using FLAG_IMMUTABLE, only use FLAG_MUTABLE if some functionality depends on the PendingIntent being mutable, e.g. if it needs to be used with inline replies or bubbles.
----
이리저리 찾아보니 크게 2가지 처리를 하는 것 같다.
1. AndroidManifest.xml에 exported 명시적으로 설정
2. gradle의 dependencies {}에 androidx.work:work-runtime:2.7.0 라이브러리 추가(for Java)
- 2.7.0부터 Android 12(API31)대응을 해서 2.7.0이상을 추가하면 되는 듯
- Unity는 mainTemplate.gradle의 dependencies {...}에 추가
- 라이브러리 선택 사항
= [Java] implementation 'androidx.work:work-runtime:2.7.0' // for Unity
= [Kotlin] implementation 'androidx.work:work-runtime-ktx:2.7.0
내 경우는 exported 관련은 이미 돼 있어서 아래와 같이 androidx.work:work-runtime:2.7.1(현재 기준 공식 최신버전)을 추가하고 해결 했다.
mainTemplete.gradle
dependencies{
....
implementation 'androidx.work:work-runtime:2.7.1' // for Java
....
}
[참조] https://bacassf.tistory.com/166
'Unity3D > Trouble Shooting' 카테고리의 다른 글
[링크] [Unity] 유니티에서 빌드한 apk가 블루스택에서 실행되지 않는 문제 해결
'Unity3D > Android' 카테고리의 다른 글
[빌드에러][Android] UnityException: Error mainTemplate.gradle file is using the old aaptOptions noCompress property definition which does not include types defined by unityStreamingAssets constant.
'Unity3D > Android' 카테고리의 다른 글
[링크] [Unity] 유니티에서 빌드한 apk가 블루스택에서 실행되지 않는 문제 해결 (0) | 2022.08.16 |
---|---|
[빌드에러][Android] Unity WARNING: The option setting 'android.enableR8=false' is deprecated (0) | 2022.06.28 |
[링크] 구글스토어 aab (150Mb이상)파일 업로드방법 (0) | 2022.04.05 |
[펌] Failed to update Android SDK Package List (0) | 2021.03.12 |
[펌] 유니티 안드로이드 빌드 에러 - unexpected element <queries> found in <manifest> (0) | 2021.03.08 |
[Crash/Android] Caused by java.lang.Error signal 11 (SIGSEGV), code 1 (SEGV_MAPERR)
1. 큰 텍스쳐 로드 시 문제
-> 텍스쳐 사이즈 줄이기
----
We found out that this problem was caused by big textures loaded at the same time.
After removing these big textures the game started up without any problems.
So for everyone that has the same problem.
Check your big textures and check when they are being loaded and try to load.
----
2. 동시에 2번의 File IO
-> 동시에 File IO 안되도록 수정
----
We found out that this problem was caused by using PlayerPrefs.Save() twice at the same time on two different functions, also we had used File.write() at that time. when we save and write files at a different time, this issue solved.
----
'Unity3D > Trouble Shooting' 카테고리의 다른 글
[펌] Failed to update Android SDK Package List
[증상]
Unity 2019에서 Android API 29를 쓰다가 API 30으로 올려서 Android SDK API 30을 받으려고 하는데 실패하고 아래와 같은 에러메시지가 떴다.
Exception: Unable to install additional SDK platform. Please run the SDK Manager manually to make sure you have the latest set of tools and the required platforms installed.
C:/Program Files/Unity/Hub/Editor/2019.4.22f1/Editor/Data/PlaybackEngines/AndroidPlayer\SDK\tools\bin\sdkmanager.bat "platforms;android-30", exit code 1
그래서 에러메시지에 있는 sdkmanager.bat 파일을 열어보니 JAVA_HOME 환경변수를 쓰고 있다.
요즘 Unity는 OpenJDK를 내장해서 각자 버전별로 쓰고 있기 때문에 환경변수를 만들지 않는데 내부 소스(sdkmanager.bat)에선 여전히 쓰게 해놓은 건 문제인 듯 하다.
아무튼 sdkmanager.bat가 돌려면 JAVA_HOME 환경변수를 만들어 줘야되니,
유니티 엔진 내부에 있던 OpenJDK를 C:\ 최상위에 하나 복사하고 JAVA_HOME으로 환경변수 만들어주니 잘 작동한다.
[유니티 엔진 내부 OpenJDK 위치] C:\Program Files\Unity\Hub\Editor\2019.4.22f1\Editor\Data\PlaybackEngines\AndroidPlayer\OpenJDK
[복사해서 옮긴 위치] C:\OpenJDK
[환경변수 셋팅] JAVA_HOME = C:\OpenJDK
[OpenJDK 시스템 환경변수 설정하기] codedragon.tistory.com/8510
[참조] forum.unity.com/threads/failed-to-update-android-sdk-package-list-unity-2019-2-10f1.869152/