官方地址
申请ak:
其中,百度api-key是与签名文件和包名绑定的,所以我们需要先获取签名文件,签名文件与SHA1值对应。我们需要输入开发板SHA1和发布版SHA1。
默认在Debug模式下,我们的签名文件是~/.android/debug.keystore
,即用户目录下的.android/debug.keystore
文件,其密码默认都为android
。可以使用如下命令来获取签名文件的SHA1值。
keytool -list -v -keystore <签名文件>
输入密码后,可以查看结果:
查看debug签名文件的SHA1值:
查看release签名文件的SHA1值:
其中,release签名文件可以用Android Studio来申请获得,用户需要输入文件名,密码,别名,别名密码。
通过Build->Genetate Signed APK...->Next->Create New...
进入。
生成新的签名文件:
在app目录下的build.gradle文件:
android {
compileSdkVersion 26
defaultConfig {
// 其他配置
}
// 签名配置
signingConfigs {
debug {
storeFile file('./debug.keystore')
storePassword 'android'
keyAlias 'androiddebugkey'
keyPassword 'android'
}
release {
storeFile file('<签名文件>')
storePassword '<签名密码>'
keyAlias '<别名>'
keyPassword '<别名密码>'
}
}
buildTypes {
debug {
// 其他配置
signingConfig signingConfigs.debug //使用debug签名
}
release {
// 其他配置
signingConfig signingConfigs.release // 使用release签名
}
}
// jni库
sourceSets {
main {
jniLibs.srcDir 'libs'
}
}
}
一般情况下,签名文件及密码这些敏感信息,是不建议直接放在gradle代码里的,而应该建立一个配置文件config.properties
,然后将该配置文件加到.gitignore
文件中,即不在git库保存,放在安全的地方。下面有一节专门讲这个配置。
可以在app目录下建立一个配置文件config.properties
,在里边存放签名文件及密码等敏感信息。
# 配置文件 app/config.properties
# debug
DEBUG_STORE_FILE = ./debug.keystore
DEBUG_STORE_PASSWORD = android
DEBUG_KEY_ALIAS = androiddebugkey
DEBUG_KEY_PASSWORD = android
# release
RELEASE_STORE_FILE = ****
RELEASE_STORE_PASSWORD = ****
RELEASE_KEY_ALIAS = ****
RELEASE_KEY_PASSWORD = ****
在app目录下的build.gradle使用配置文件:
// 加载配置文件
Properties props = new Properties()
FileInputStream fis = new FileInputStream(file("./config.properties"))
BufferedReader bf = new BufferedReader(new InputStreamReader(fis, "UTF-8"));
props.load(bf)
android {
// 签名配置
signingConfigs {
debug {
storeFile file(props['DEBUG_STORE_FILE'])
storePassword props['DEBUG_STORE_PASSWORD']
keyAlias props['DEBUG_KEY_ALIAS']
keyPassword props['DEBUG_KEY_PASSWORD']
}
release {
storeFile file(props['RELEASE_STORE_FILE'])
storePassword props['RELEASE_STORE_PASSWORD']
keyAlias props['RELEASE_KEY_ALIAS']
keyPassword props['RELEASE_KEY_PASSWORD']
}
}
// 其他配置
}
先加载配置文件,然后使用props['键']
来获取值。
另外,也可以使用manifestPlaceholders
来配置不同的渠道号等信息。后续专门写一节来具体描述。
在Application标签下,配置mata-data值:
data
android:name="com.baidu.lbsapi.API_KEY"
android:value="<你申请的ak值>" />
百度地图及定位所需要的权限列表。
<uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />
其中,在Android 6.0之后,即如果compileSdkVersion >= 23
,危险权限需要动态申请。
在百度地图开发中,需要在获取到权限之后,初始化地图SDK:
SDKInitializer.initialize(getApplicationContext());
SDKInitializer.setCoordType(CoordType.BD09LL);
需要注意的是,这个初始化必须在含有MapView的Activity的setContentView()之前,否则会因为没有初始化而导致崩溃。
如果使用百度定位,需要在AndroidManifest文件的Application标签下配置service标签:
<service
android:name="com.baidu.location.f"
android:enabled="true"
android:process=":remote" />
百度地图相关混淆配置:
-keep class com.baidu.** {*;}
-keep class vi.com.** {*;}
-dontwarn com.baidu.**
http://blog.csdn.net/yujihu989/article/details/54589684