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()之前



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章