私はこのソリューションをどこからでも探していますが、まだ動作させることはできません。私のGoogle APIキーはresフォルダ内の文字列に保存されています。私は自分のプロジェクトでproguardを有効にしてプロパティを設定し、後でAPKを生成しました。 Googleキーをもう一度(Androidスタジオまたはhttp://www.javadecompilers.com/apktoolを使用して)ProGuardを使用してAndroidでGoogle鍵を難読化する方法
マニフェストでAPIキーを使用するにはresフォルダにAPIキーを格納することをおすすめしますが、そのキーのリバースエンジニアリングセキュリティを支援する方法は決して説明していません。
マイAndroidManifest.xml
は、コードのこの部分を持っています
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.proyecto.cutcsa.cutcsa" >
...
<application
android:allowBackup="true"
android:icon="@drawable/app_icon"
android:label="@string/app_name"
android:theme="@style/AppTheme"
android:name="android.support.multidex.MultiDexApplication">
...
<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="@string/google_key" />
...
</application>
</manifest>
私build.gradle
は次があります。
apply plugin: 'com.android.application'
android {
compileSdkVersion 25
buildToolsVersion "23.0.3"
useLibrary 'org.apache.http.legacy'
defaultConfig {
applicationId "com.proyecto.cutcsa.cutcsa"
minSdkVersion 16
targetSdkVersion 25
versionCode 1
versionName "1.0"
multiDexEnabled true
}
buildTypes {
release {
debuggable false
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
debug {
debuggable false
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
dexOptions {
javaMaxHeapSize "4g"
}
}
dependencies {
...
}
そして、私の `proguard-rules.pro -optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-verbose
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class com.android.vending.licensing.ILicensingService
-assumenosideeffects class android.util.Log {
public static *** d(...);
public static *** v(...);
}
-keepclasseswithmembernames class * {
native <methods>;
}
-keep public class * extends android.view.View {
public <init>(android.content.Context);
public <init>(android.content.Context, android.util.AttributeSet);
public <init>(android.content.Context, android.util.AttributeSet, int);
public void set*(...);
}
-keepclasseswithmembers class * {
public <init>(android.content.Context, android.util.AttributeSet);
}
-keepclasseswithmembers class * {
public <init>(android.content.Context, android.util.AttributeSet, int);
}
-dontwarn java.awt.**
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
-keep class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator *;
}
-keepclassmembers class **.R$* {
public static <fields>;
}
誰かがこの問題を教えてくれますか?私は本当にそれを感謝します。前もって感謝します!
https://github.com/GoogleCloudPlatform/android-docs-samples/blob/master/speech/Speech/app/src/main/java/com/google/cloud/android/speech/AccessTokenLoader.java#L68あなたのデザインは良くありません。ドキュメントに記載されているように、応答にトークンを提供するプロセスをホストする必要があります。 –
@Robert Rowntreeあなたの答えに感謝します。なぜ私のデザインは良くないと言いますか? Googleでは、次のようにAPIキーを使用して作業することを提案しています。 https://developers.google.com/maps/documentation/android-api/start さらに、コメントに投稿したサンプルはどのように機能しますか?私はそれをどのように呼びますか?どうやって使うの?敬具! –
あなたがコードリンクのグーグルから発行された警告の理由を知っていれば、あなたは良いです。サーバー(SECURE)からのアクセストークンを要求する警告....モバイルクライアントに関する注釈は、api-keyのいずれかを格納するか、または例としてCREDENTIAL全体を格納するクライアントとは異なります。難読化しても、./res/rawのKEYまたは./res/rawのCREDENTIALは最高のセキュリティではありません。 –