2014-04-29 2 views
3

안드로이드 응용 프로그램의 사용자 데이터를 저장하는 데 사용하는 Parse 계정이 있습니다. 소스 컨트롤을 사용하고 있기 때문에 코드에 내 비밀 키를 포함시키고 싶지 않습니다. "config"파일을 가지고 소스 제어를 유지하고 키를 호스트 할 수있는 방법이 있습니까? 이것이 실현 가능하지 않다면 그러한 상황을 처리하는 가장 좋은 방법은 무엇입니까?안드로이드 응용 프로그램에 비밀 키를 저장하는 가장 좋은 방법

+0

소스에 액세스 할 수있는 사람들로부터 파스 키를 비밀로 유지하려고하지만 애플리케이션과 함께 배포하는 데 신경 쓰지 않으십니까? 정말 관심이있는 사람이라면 APK를 디 컴파일하여 키를 얻을 수 있습니다. – nasch

+0

@nasch 나는 이것이 내가 미래에 프로젝트를 오픈 소싱하는 것을 막을 것이라고 더 걱정했다. 이 상황을 어떻게 처리할까요? – khalid13

+0

[Android의 비공개 API 키 저장에 대한 우수 사례] (https://stackoverflow.com/questions/14570989/best-practice-for-storing-private-api-keys-in-android)의 가능한 복제본 – Suhaib

답변

1

예, 소스 제어 외부에 폴더를 만들고 거기에 app.properties라는 파일을 넣고 해당 속성 파일에 키를 넣은 다음 폴더를 빌드 경로에 추가 할 수 있습니다. 그런 다음 특성 로더를 사용하여 클래스 경로에서로드하십시오.

개발자가 많거나 여러 대의 dev 컴퓨터가있는 경우 로컬 속성 위치를 빌드 경로의 변수로 설정하여 각 개발자가 자신의 환경을 구성 할 수 있습니다.

1

하나의 옵션은 키를 환경 변수에 넣은 다음 빌드 중에 읽는 것입니다. 당신의 pom.xml에

<properties> 
    <secretKey>${env.SECRET_KEY}</secretKey> 
<properties> 

더 아래로 자원

<resource> 
     <directory>src/main/resources</directory> 
     <filtering>true</filtering> 
    </resource> 

는 "config.properties"로 유지 자원의 "filtering '를 활성화 (secret.key) 속성을 선언 대체 할 준비가 된 변수로 읽으십시오 :

secret_key=${secretKey} 

$ {secret.key}를 환경 변수의 값으로 대체합니다.

Android 스튜디오에서 빌드 할 때 gradle을 사용하는 경우 16.6.6.2 on filtering files 섹션을 참조하십시오.

Console console = System.console() 
def password = console.readPassword("Enter Secret Key: ") 

를 사용 gradlew build.gradle 내에서 실행할 때 Gradle을에서 다음

import org.apache.tools.ant.filters.FixCrLfFilter 
import org.apache.tools.ant.filters.ReplaceTokens 

task copyProductionConfig(type: Copy) { 
    from 'source' 
    include 'config.properties' 
    into 'build/targetpath/config' 
    expand([ 
    secretKey: System.getenv("SECRET_KEY") 

    ]) 
} 

당신은 또한 입력을 요청할 수 있습니다 추가 한 다음 적절한 설정 또는 소스 파일에 적용합니다.

관련 문제