MapBox android源码编译

MapBox : https://github.com/mapbox/mapbox-gl-native

MapBox android : https://github.com/mapbox/mapbox-gl-native/tree/master/platform/android

编译参考blog : https://www.jianshu.com/p/ec4c7602b934

进入正题:

  1. 下载源码git clone,download(无论是那种姿势,下载下来就行)

  2. 通过Android studio打开(我的as版本是3.0.1)

  3. 打开后会报错

  4. 很明显缺少配置文件,暂且先不管,先注释掉项目根目录下的gradle中缺失的文件,然后点下标题栏的锥子!

  5. 嗯,还是没有编译完成,咱不急,接着看报错,Message中的提示不明显,看Gradle Console

  6. PluginCrashReporter这个说明我么少插件,Settings->Appearance&Behavior->System Settings->Android SDk点击SDK Tools下载CMake,LLDB,NDk,再次点击小锤子
    4.编译后没成功,嗯,这是正常现象,哈哈

  7. 这样吧,直接来大招,我们直接看项目MapboxGLAndroidSDKTestApp的gradle

  8. 好多东西啊,abi,node,npm,貌似跟项目没啥关系,直接删吧(不敢删的先注释掉),最后成这样,看着简洁多了,有木有
    `apply plugin: ‘com.android.application’

android {
compileSdkVersion androidVersions.compileSdkVersion

defaultConfig {
    applicationId "com.mapbox.mapboxsdk.testapp"
    minSdkVersion androidVersions.minSdkVersion
    targetSdkVersion androidVersions.targetSdkVersion
    versionCode 13
    versionName "6.0.0"
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}

compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
}

packagingOptions {
    exclude 'META-INF/LICENSE.txt'
    exclude 'META-INF/NOTICE.txt'
    exclude 'LICENSE.txt'
}

lintOptions {
    baseline file("lint-baseline-local.xml")
    checkAllWarnings true
    warningsAsErrors true
    disable 'MissingTranslation', 'GoogleAppIndexingWarning', 'UnpackedNativeCode', 'IconDipSize', 'TypographyQuotes'
    abortOnError false
}

buildTypes {
    debug {
        testCoverageEnabled true
        minifyEnabled false
        shrinkResources false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
    release {
        minifyEnabled true
        shrinkResources true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        signingConfig signingConfigs.debug
    }
}

dexOptions {
    maxProcessCount 8
    javaMaxHeapSize "2g"
    preDexLibraries true
}

}

dependencies {
implementation dependenciesList.kotlinLib

implementation project(':MapboxGLAndroidSDK')
implementation dependenciesList.mapboxJavaTurf

implementation dependenciesList.supportAppcompatV7
implementation dependenciesList.supportRecyclerView
implementation dependenciesList.supportDesign
implementation dependenciesList.supportConstraintLayout

implementation dependenciesList.gmsLocation
implementation dependenciesList.reLinker
implementation dependenciesList.timber
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
debugImplementation dependenciesList.leakCanaryDebug
releaseImplementation dependenciesList.leakCanaryRelease

androidTestImplementation dependenciesList.supportAnnotations
androidTestImplementation dependenciesList.testRunner
androidTestImplementation dependenciesList.testRules
androidTestImplementation dependenciesList.testEspressoCore
androidTestImplementation dependenciesList.testEspressoIntents
androidTestImplementation dependenciesList.testEspressoContrib
androidTestImplementation dependenciesList.testUiAutomator

}

apply from: “ r o o t D i r / g r a d l e / g r a d l e − m a k e . g r a d l e " a p p l y f r o m : " {rootDir}/gradle/gradle-make.gradle" apply from: " rootDir/gradle/gradlemake.gradle"applyfrom:"{rootDir}/gradle/gradle-config.gradle”
apply from: “ r o o t D i r / g r a d l e / g r a d l e − c h e c k s t y l e . g r a d l e " a p p l y f r o m : " {rootDir}/gradle/gradle-checkstyle.gradle" apply from: " rootDir/gradle/gradlecheckstyle.gradle"applyfrom:"{rootDir}/gradle/gradle-lint.gradle”

apply plugin: ‘kotlin-android’
apply plugin: ‘kotlin-android-extensions’
`

  1. 还是有问题呀,开始着急了,静下心看看这个报错

  2. 什么情况居然回到原点了,在看看报错

  3. 这个问题啊,跟as配置一样就行,我本地的是4.6,把下面这句话替换了就行
    distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip
    还有项目根目录的gradle替换成

     classpath 'com.android.tools.build:gradle:3.2.0'
    
  4. 点完小锤子还有错Message

  5. 跟着错误去错误的地方就好报的42行,其实不是这个问题,主要问题是MapboxGLAndroidSDK应该是一个lib,修改gradle中的第一行
    apply plugin: 'com.android.library'

  6. 修改后点下小锤子看是否编译通过,不行,在关闭项目,再开,基本就好了最好看到项目的lib,java,app的图标变成这样

  7. 恭喜项目编译通过,最后看运行到手机上的效果,居然还有点问题

  8. 缺少so文件,嗯,这个嘛,不难,我们可以依赖一个远程的MapBoxSDK然后下载完后,在project最下面的External Libraries下面找到MapBoxSDk

  9. 鼠标箭头放classes上,右键点Show in Explorer进到了jars文件夹,然后点到上一级文件夹可以看到jni,jni里面就是我们需要的so文件,全部复制到MapboxGLAndroidSDK

  10. build下项目,对了记得去Mapbox申请token,运行后的效果是这样

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是mapbox for android的教程: 1. 安装Mapbox SDK 在项目的build.gradle文件中添加以下依赖项: ```gradle implementation 'com.mapbox.mapboxsdk:mapbox-android-sdk:9.6.1' ``` 2. 在布局文件中添加MapView ```xml <com.mapbox.mapboxsdk.maps.MapView android:id="@+id/mapView" android:layout_width="match_parent" android:layout_height="match_parent" mapbox:mapbox_cameraTargetLat="40.73581" mapbox:mapbox_cameraTargetLng="-73.99155" mapbox:mapbox_cameraZoom="11"/> ``` 3. 在Activity中初始化MapView ```java public class MainActivity extends AppCompatActivity implements OnMapReadyCallback { private MapView mapView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Mapbox.getInstance(this, "YOUR_MAPBOX_ACCESS_TOKEN"); setContentView(R.layout.activity_main); mapView = findViewById(R.id.mapView); mapView.onCreate(savedInstanceState); mapView.getMapAsync(this); } @Override public void onMapReady(@NonNull MapboxMap mapboxMap) { // 在这里可以对地图进行操作 } @Override protected void onStart() { super.onStart(); mapView.onStart(); } @Override protected void onResume() { super.onResume(); mapView.onResume(); } @Override protected void onPause() { super.onPause(); mapView.onPause(); } @Override protected void onStop() { super.onStop(); mapView.onStop(); } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); mapView.onSaveInstanceState(outState); } @Override protected void onRestoreInstanceState(Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); mapView.onRestoreInstanceState(savedInstanceState); } @Override protected void onDestroy() { super.onDestroy(); mapView.onDestroy(); } } ``` 4. 在Activity中对地图进行操作 ```java // 获取地图对象 MapboxMap mapboxMap = mapView.getMapAsync(this); // 移动地图到指定位置 CameraPosition position = new CameraPosition.Builder() .target(new LatLng(40.73581, -73.99155)) .zoom(11) .build(); mapboxMap.animateCamera(CameraUpdateFactory.newCameraPosition(position), 1000); // 添加标记 MarkerOptions markerOptions = new MarkerOptions() .position(new LatLng(40.73581, -73.99155)) .title("Marker Title") .snippet("Marker Description"); mapboxMap.addMarker(markerOptions); // 添加线 List<LatLng> points = new ArrayList<>(); points.add(new LatLng(40.73581, -73.99155)); points.add(new LatLng(40.748817, -73.985428)); LineOptions lineOptions = new LineOptions() .addAll(points) .color(Color.parseColor("#3bb2d0")) .width(2); mapboxMap.addPolyline(lineOptions); // 添加面 List<LatLng> polygonPoints = new ArrayList<>(); polygonPoints.add(new LatLng(40.73581, -73.99155)); polygonPoints.add(new LatLng(40.748817, -73.985428)); polygonPoints.add(new LatLng(40.718217, -73.998284)); polygonPoints.add(new LatLng(40.73581, -73.99155)); FillOptions fillOptions = new FillOptions() .addAll(polygonPoints) .alpha(0.4f) .fillColor(Color.parseColor("#3bb2d0")); mapboxMap.addPolygon(fillOptions); ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值