2017-10-16 103 views
0

我有一个Android应用程序,我想部署用于商业用途。我正在使用aws秘密凭证,目前我已在代码中对其进行了硬编码。存储秘密凭据的安全方式

有没有任何安全的方式来部署Android应用程序,通过传递凭据作为外部参数。就像我们在服务器应用程序中所做的一样,将凭据作为环境变量传递。我不想在我的代码库中打开秘密密钥。

我想知道是否有任何方式在android应用中做类似的事情。

回答

0

我发现了下面的方法来传递creds作为envirnoment变量apk在建设时。这些将被存储为构建变量。

在项目目录中创建一个gradle.properties文件,并添加您的凭据:

AWS_CRED=aws_cred 

在你gradle这个构建文件,在机器人添加以下内容:

android { 
defaultConfig{ 
manifestPlaceholders=[AWS_CRED:AWS_CRED] 
} 
} 

它的作用是什么,它会将构建变量传递给你的Android清单。现在去AndroidManifest.xml中和标签下添加以下内容:

<application 
<meta-data 
      android:name="AWS_CRED" 
      android:value="${AWS_CRED}" /> 
</application> 

现在,在任何Java代码访问的值,如下:

applicationInfo = getApplicationContext().getPackageManager().getApplicationInfo(getApplicationContext().getPackageName(), PackageManager.GET_META_DATA); 

此方法为我工作,如有意见任何人都知道更好的方式来做到这一点。

1

我会用的Environment variables而是通过摇篮同样的原则。

这个想法是你的用户文件夹中应该有一个gradle.properties文件,Gradle可以从中拾取属性。这个文件当然不会被添加到源代码控制中。

以后还可以做这样的事情

〜/ .gradle/gradle.properties

projectAwsCred1=cred1 
projectAwsCred2=cred2 

的build.gradle(APP)

... 
buildConfigField "String", "AWS_CRED_1", "\"projectAwsCred1\"" 
buildConfigField "String", "AWS_CRED_2", "\"projectAwsCred2\"" 

,然后(建设),你可以在你的代码中调用它像正常Build.AWS_CRED_1

这样,您的凭证就会在您的应用程序中烘焙,但仅限于编译时间。您当然必须在自述文件中记录这些信息,以便其他人(或未来您)知道将地址放在projectAwsCred*信息中。

+0

感谢您的回答, –