android studio添加so库

真是蛋疼,以前开过百度地图,这次直接复制过来使用,结果碰一鼻子灰,在这里好好总结下


百度地图的步骤:


1、在百度开放着平台申请密钥,这个不会的,看里面的说明把


2、将百度地图所需要的包和so库文件拷到工程中,这里很容易出问题,在eclipse中,这两者的设置方式是一样的,但在as中,二者不是一致的

.jar的包,放在libs中即可,但是.so库文件却不能这么简单的处理,网络上艘一下,有很多中方法,但总结出来就三种:

a、直接将.so的文件放在libs目录下,然后在app的build.gradle中的android标签下添加

sourceSets{

main{

jniLibs.srcDirs = ['libs']



这样就把.so库文件编译成jar文件



b、在main目录下,新建一个jniLibs文件夹,将armeabi的所有内容复制进去,然后就能直接编译进apk的包中了


c、在其他地方新建lib文件夹,将armeabi的内容全部复制进去,然后压缩,命名为armeabi..jar并放入libs目录下即可



3、在manifest文件中,对application进行添加修改

如果是在自定义的application中进行初始化的话(官方推荐,因为application是最先执行的,而百度地图的初始化必须在set'ContentView()方法之前,所以建议在app中进行初始化,若在setContentView之后进行初始化,则会报错),则需要先在application的标签下添加


android:name=".app.MyApplication"

这样才会在运行的时候最先执行自定义的application


然后需要添加第一步申请来的key,也是添加在application中

<meta-data最后
    android:name="com.baidu.lbsapi.API_KEY"
    android:value="geKdo2M1V4t6I5X7ClLkMOb7"/>


还需要添加service标签



<service
    android:name="com.baidu.location.f"
    android:enabled="true"
    android:process=":remote">
</service>


还需要添加所需要的权限,我是复制了最完整的权限,直接复制即可

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE">
</uses-permission>
<uses-permission android:name="android.permission.INTERNET">
</uses-permission>
<uses-permission android:name="com.android.launcher.permission.READ_SETTINGS"/>
<uses-permission android:name="android.permission.WAKE_LOCK">
</uses-permission>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<!-- SDK1.5需要android.permission.GET_TASKS权限判断本程序是否为当前运行的应用? -->
<uses-permission android:name="android.permission.GET_TASKS"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE">
</uses-permission>
<uses-permission android:name="android.permission.WRITE_SETTINGS"/>
<!-- 这个权限用于进行网络定位 -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION">
</uses-permission>
<!-- 这个权限用于访问GPS定位 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION">
</uses-permission>
<!-- 用于访问wifi网络信息,wifi信息会用于进行网络定位 -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE">
</uses-permission>
<!-- 获取运营商信息,用于支持提供运营商信息相关的接口 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE">
</uses-permission>
<!-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位 -->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE">
</uses-permission>
<!-- 用于读取手机当前的状态 -->
<uses-permission android:name="android.permission.READ_PHONE_STATE">
</uses-permission>
<!-- 写入扩展存储,向扩展卡写入数据,用于写入离线定位数据 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE">
</uses-permission>
<!-- 访问网络,网络定位需要上网 -->
<uses-permission android:name="android.permission.INTERNET"/>
<!-- SD卡读取权限,用户写入离线定位数据 -->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS">
</uses-permission>
<!-- 允许应用读取低级别的系统日志文件 -->
<uses-permission android:name="android.permission.READ_LOGS">
</uses-permission>


如果


这样就可以开始开发百度地图了。


下面是完整的manifest文件


<?xml version="1.0" encoding="utf-8"?>
<manifest
    package="包名"
    android:installLocation="preferExternal"
    xmlns:android="http://schemas.android.com/apk/res/android">

    <application
        android:name=".app.MyApplication"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme">


        <meta-data
            android:name="com.baidu.lbsapi.API_KEY"
            android:value="自己的key"/>

        <service
            android:name="com.baidu.location.f"
            android:enabled="true"
            android:process=":remote">
        </service>

        <activity
            android:name=".main.MainActivity"
            android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>

                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
    </application>


    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE">
    </uses-permission>
    <uses-permission android:name="android.permission.INTERNET">
    </uses-permission>
    <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS"/>
    <uses-permission android:name="android.permission.WAKE_LOCK">
    </uses-permission>
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
    <!-- SDK1.5需要android.permission.GET_TASKS权限判断本程序是否为当前运行的应用? -->
    <uses-permission android:name="android.permission.GET_TASKS"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE">
    </uses-permission>
    <uses-permission android:name="android.permission.WRITE_SETTINGS"/>
    <!-- 这个权限用于进行网络定位 -->
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION">
    </uses-permission>
    <!-- 这个权限用于访问GPS定位 -->
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION">
    </uses-permission>
    <!-- 用于访问wifi网络信息,wifi信息会用于进行网络定位 -->
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE">
    </uses-permission>
    <!-- 获取运营商信息,用于支持提供运营商信息相关的接口 -->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE">
    </uses-permission>
    <!-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位 -->
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE">
    </uses-permission>
    <!-- 用于读取手机当前的状态 -->
    <uses-permission android:name="android.permission.READ_PHONE_STATE">
    </uses-permission>
    <!-- 写入扩展存储,向扩展卡写入数据,用于写入离线定位数据 -->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE">
    </uses-permission>
    <!-- 访问网络,网络定位需要上网 -->
    <uses-permission android:name="android.permission.INTERNET"/>
    <!-- SD卡读取权限,用户写入离线定位数据 -->
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS">
    </uses-permission>
    <!-- 允许应用读取低级别的系统日志文件 -->
    <uses-permission android:name="android.permission.READ_LOGS">
    </uses-permission>


</manifest>




本人开发中遇到的问题:

报错:

Failure [INSTALL_FAILED_CPU_ABI_INCOMPATIBLE]


解决:这是cpu对armeabi中so文件的不匹配,只要分文件使用




里面有五个型号的arm ,cpu'会自动对应,而每个文件夹的内容是一样的



报错:

Failure [INSTALL_FAILED_INSUFFICIENT_STORAGE]


解决:

在manifest文件中的头标签中添加

android:installLocation="preferExternal"


报错:

you have not supplyed the global app context info from SDKInitializer.initialize(Context) function

解决:

百度地图的初始化必须在setContentView()之前

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值