마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

안드로이드 타겟 버전관련 질문 드립니다. 비콘관련 동작안함

0 추천

비콘관련해서 개발중인데요.

샘플소스는 안드로이드 타겟이 21로 되어있고 기기로 빌드 시 비콘을 잘 찾습니다.

하지만 구글 정책상 sdk 타겟버전을 30이상 올려야한다고 해서 올리게되면

위치권한 등등 권한 오류가 떠서 권한 추가도 다 했는데도 불구하고

동작을 안하는겁니다. 미치겠네요.

 

그래서 궁금한 점은

1. 타겟을 21로 놔둔 상태로 플레이스토어에 올릴 수 있는지?

2. 올릴 수 없다면 코드 중 제가 놓친게 있는건지 ?

테스트 중인 샘플소스도 함께 올립니다.

잘되는 샘플 소스

>> https://drive.google.com/file/d/1dYzCiUMLU9ligNRqS0ALCR8K84bZ2M3_/view?usp=sharing

 

버전만 올린것인데 안되는 소스 ㅠㅠㅠ

>> https://drive.google.com/file/d/1VjfkNLSs861YfcdJd2JT7rQXP2j5RbsW/view?usp=sharing

3. 타겟을 올리게 되면 수없이 나는 에러때문에 그냥 새프로젝트 생성해서 타겟지정해서 코드 옮겨줬어요..

 

덧) 이클립스때도 그러더니 안드로이드스튜디오 역시 에러 천국이네요. 뭐만 바꿨다 하면 에러펑펑!

베타테스터 (260 포인트) 님이 2022년 7월 18일 질문

2개의 답변

+1 추천
PlayStore 정책 페이지에 가시면 아래와 같이 나옵니다.
 

When you upload an APK, it must meet Google Play’s target API level requirements. New apps and app updates must target Android 11 (API level 30) or higher; except for Wear OS apps, which must target API level 28 or higher.

31까지 설정해주셔야 하고, 매년 버전이 하나씩 올라간다고 보시면 됩니다.

그리고, 참고로 위치권한은 AndroidManifest.xml에만 추가하면 안되고 코드를 통하여 처리를 해주어야 합니다.

spark (225,780 포인트) 님이 2022년 7월 18일 답변
+1 추천

해당 프로젝트를 다운로드 받아서 API 30으로 해서 빌드를 해봤습니다. 변경사항은 아래와 같습니다.

개발환경
JDK 11 (JDK 11+ 필수)
Android Studio Chimpmunk 2021.2.1 patch1

project/gradle/wrapper/gradle-wrapper.properties

distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-all.zip

 

project/build.gradle

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    repositories {
        mavenCentral()
        google()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:7.2.1'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        mavenCentral()
        google()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

 

project/app/build.gradle
 

apply plugin: 'com.android.application'

android {
    compileSdkVersion 30

    defaultConfig {
        applicationId "com.minewbeacon.blescan.demo"
        minSdkVersion 23
        targetSdkVersion 30
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    repositories {
        flatDir {
            dirs 'libs'
        }
    }
}

dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation files('libs/minewBeaconScan.jar')
    implementation 'com.android.support:appcompat-v7:28.0.0'
    implementation 'com.android.support:recyclerview-v7:28.0.0'

    testImplementation 'junit:junit:4.13.2'
}

 

 Android Studio의 Preferences > Build, Execution, Deployment > Build Tools > Gradle에서

Gradle JDK: 11

로 설정하셔야 합니다.

 

도움이 되시길 바래요.

spark (225,780 포인트) 님이 2022년 7월 18일 답변
spark님이 2022년 7월 18일 수정
답변 감사합니다.
비콘검색 안되는부분은 글 쓴이후 답변이 없어 이것저것 해보다 보니
원인은 위험권한이라는것을 알게됐고,
블루투스스캔, 위치권한등을 아래코드
ActivityCompat.requestPermissions(MainActivity.this, mRequiredPermissions, PERMISSIONS_REQUEST_CODE);

로 요청하니 그뒤로 검색은 되더라구요.

알려주신방법으로 적용해보려 하니,

project/build.gradle 에서 에러가 납니다.
다른샘플코드들도 테스트 해보고 그러려면 에러가나면 안될거같은데 원인을 잘 모르겠어요. ㅠㅠ


기존코드 :
// Top-level build file where you can add configuration options common to all sub-projects/modules.
plugins {
    id 'com.android.application' version '7.2.1' apply false
    id 'com.android.library' version '7.2.1' apply false
}

task clean(type: Delete) {
    delete rootProject.buildDir
}






변경코드:

// Top-level build file where you can add configuration options common to all sub-projects/modules.
 
buildscript {
    repositories {
        mavenCentral()
        google()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:7.2.1'
 
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}
 
allprojects {
    repositories {
        mavenCentral()
        google()
    }
}
 
task clean(type: Delete) {
    delete rootProject.buildDir
}
Build file 'C:\Users\admin\Downloads\BeaconScanTest\build.gradle' line: 18

A problem occurred evaluating root project 'BeaconScanTest'.
> Build was configured to prefer settings repositories over project repositories but repository 'MavenRepo' was added by build file 'build.gradle'

* Try:
> Run with --info or --debug option to get more log output.
> Run with --scan to get full insights.

* Exception is:
org.gradle.api.GradleScriptException: A problem occurred evaluating root project 'BeaconScanTest'
...
...
Caused by: org.gradle.api.InvalidUserCodeException: Build was configured to prefer settings repositories over project repositories but repository 'MavenRepo' was added by build file 'build.gradle'
    at org.gradle.internal.management.DefaultDependencyResolutionManagement.repoMutationDisallowedOnProject(DefaultDependencyResolutionManagement.java:201)
    at org.gradle.internal.ImmutableActionSet$SetWithFewActions.execute(ImmutableActionSet.java:285)
    at org.gradle.api.internal.DefaultDomainObjectCollection.doAdd(DefaultDomainObjectCollection.java:260)
    at org.gradle.api.internal.DefaultNamedDomainObjectCollection.doAdd(DefaultNamedDomainObjectCollection.java:113)
    at org.gradle.api.internal.DefaultDomainObjectCollection.add(DefaultDomainObjectCollection.java:249)
    at org.gradle.api.internal.artifacts.DefaultArtifactRepositoryContainer.access$101(DefaultArtifactRepositoryContainer.java:35)
    at org.gradle.api.internal.artifacts.DefaultArtifactRepositoryContainer.lambda$new$0(DefaultArtifactRepositoryContainer.java:38)
    at org.gradle.api.internal.artifacts.DefaultArtifactRepositoryContainer.addWithUniqueName(DefaultArtifactRepositoryContainer.java:101)
    at org.gradle.api.internal.artifacts.DefaultArtifactRepositoryContainer.addRepository(DefaultArtifactRepositoryContainer.java:89)
    at org.gradle.api.internal.artifacts.DefaultArtifactRepositoryContainer.addRepository(DefaultArtifactRepositoryContainer.java:84)
    at org.gradle.api.internal.artifacts.dsl.DefaultRepositoryHandler.mavenCentral(DefaultRepositoryHandler.java:103)
    at jdk.internal.reflect.GeneratedMethodAccessor157.invoke(Unknown Source)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at org.gradle.internal.metaobject.BeanDynamicObject$MetaClassAdapter.invokeMethod(BeanDynamicObject.java:484)
    at org.gradle.internal.metaobject.BeanDynamicObject.tryInvokeMethod(BeanDynamicObject.java:196)
    at org.gradle.internal.metaobject.CompositeDynamicObject.tryInvokeMethod(CompositeDynamicObject.java:98)
    at org.gradle.internal.extensibility.MixInClosurePropertiesAsMethodsDynamicObject.tryInvokeMethod(MixInClosurePropertiesAsMethodsDynamicObject.java:34)
    at org.gradle.internal.metaobject.ConfigureDelegate.invokeMethod(ConfigureDelegate.java:56)
제가 빌드해본 건 원본 프로젝트예요.
샘플 프로젝트는 라이브러리모듈로 임포트가 되어 있었는데, 님의 프로젝트는 jar파일을 임포트해서 생기는 문제로 보이네요.  jar파일이 아니라 aar형태로 하던가 아니면 샘플 프로젝트처럼 라이브러리 모듈로 임포트하던가 하셔야할 것 같이 보이네요.
...