日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

SDK快速接入(不建議使用)

前提條件

使用限制

  • 當前快速接入方式,在Android 9.0及以上系統會有發生崩潰的風險,請選擇SDK穩健接入方式接入。

  • 如當前已采用“快速接入”方式接入,發布補丁時,請在控制臺設置過濾機型,過濾Android 9.0及以上系統版本。

  • 支持Android 4.3及以上系統,如自研設備和系統,請關閉系統級jit后進行接入。

  • 如需要混淆,需要使用ProGuard進行混淆。

  • 熱修復SDK僅支持Java代碼、資源文件和so文件的修復。

集成步驟

  1. 添加工程依賴

    1. Android Studio集成方式

      gradle遠程倉庫依賴, 打開項目找到App的build.gradle文件,添加如下配置:

      添加Maven倉庫地址:

      repositories {
         maven {
             url "http://maven.aliyun.com/nexus/content/repositories/releases"
         }
      }

      添加gradle坐標版本依賴:

      android {
          ......
          defaultConfig {
              applicationId "com.xxx.xxx" //包名
              ......
              ndk {
                  //選擇要添加的對應cpu類型的.so庫。
                  //熱修復支持五種
                  abiFilters 'arm64-v8a', 'armeabi', 'armeabi-v7a', 'x86', 'x86_64'
              }
              ......
          }
          ......
      }
      dependencies {
          ......
              compile 'com.aliyun.ams:alicloud-android-hotfix:3.4.1'
          ......
      }

      如若倉庫訪問失敗, 那么用本地依賴的方式進行依賴。

      重要
      • 使用android studio打包生成apk時,要關閉instant run。

      • 使用gradle plugin版本高于4.2時,可能會因為自動開啟資源優化導致資源名稱被混淆,進而導致在生成補丁時一直卡在“開始構建補丁...”,無法正常解析apk包。解決方案:在gradle.properties 中新增android.enableResourceOptimizations=false,重新生成基線包和修復包,然后再生成補丁。

      • 如果開啟了代碼混淆,需要關閉R8,不然會導致生成的補丁較大。解決方案:在gradle.properties 中新增android.enableR8=false,重新生成基線包和修復包,然后再生成補丁。

      • 若SDK集成過程中出現UTDID沖突,請參考阿里云-云產品SDK UTDID沖突解決方案

    2. eclipse集成方式

      1. 下載OneSDk.zip,解壓出hotfix_core-release.aar文件后再解壓這個aar文件。

      2. 復制解壓文件jni目錄下的libsophix.so到自己的jni目錄下, eclipse jni目錄一般指的就是項目libs目錄。

      3. 復制utdid4all-x.x.x_proguard.jar和alicloud-android-utils-x.x.x.jar文件到項目libs目錄下。

      4. 重命名classes.jar為sophix.jar并復制到項目libs目錄下。

      5. 合并AndroidManifest.xml文件中的內容到本項目AndroidManifest.xml文件。

        重要

        編譯期間報utdid類重復異常, 那么步驟2中添加的utdid4all-x.x.x_proguard.jar從項目libs目錄移除即可。

  2. 添加應用權限

    Sophix SDK使用到以下權限,使用Maven依賴或者aar依賴可以不用配置。具體配置在AndroidManifest.xml中。

    <! -- 網絡權限 -->
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <! -- 外部存儲讀權限,調試工具加載本地補丁需要 -->
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

    READ_EXTERNAL_STORAGE權限屬于Dangerous Permissions,僅調試工具獲取外部補丁需要,不影響線上發布的補丁加載,調試時請自行做好android6.0以上的運行時權限獲取。

  3. 配置AndroidManifest文件

    AndroidManifest.xml中間的application節點下添加如下配置:

    <meta-data
    android:name="com.taobao.android.hotfix.IDSECRET"
    android:value="App ID" />
    <meta-data
    android:name="com.taobao.android.hotfix.APPSECRET"
    android:value="App Secret" />
    <meta-data
    android:name="com.taobao.android.hotfix.RSASECRET"
    android:value="RSA密鑰" />

    將上述value中的值分別改為通過平臺HotFix服務申請得到的App Secret和RSA密鑰,出于安全考慮,建議使用setSecretMetaData這個方法進行設置,詳見SDK API的方法說明。如找不到對應參數,可參考EMAS速入門中的“下載SDK”獲取應用配置信息。

    說明
    • 另外,熱修復暫不支持EMAS統一插件的JSON文件讀取。

    • App ID/App Secret將被用于計量計費,請妥善保管注意安全。

  4. 混淆配置

    #基線包使用,生成mapping.txt
    -printmapping mapping.txt
    #生成的mapping.txt在app/build/outputs/mapping/release路徑下,移動到/app路徑下
    
    #修復后的項目使用,保證混淆結果一致
    #-applymapping mapping.txt
    
    #hotfix
    -keep class com.taobao.sophix.**{*;}
    -keep class com.ta.utdid2.device.**{*;}
    #防止inline
    -dontoptimize
    重要

    開啟混淆時,生成修復包要使用舊包的mapping文件以保證混淆結果一致。

  5. 使用proguad混淆

    如果開啟了代碼混淆,需要關閉R8,使用proguard進行混淆。不然可能導致生成補丁異常。根據使用的Android Gradle Plugin版本,具體操作如下:

    1. Android Gradle Plugin低于7.0

      在項目根目錄的gradle.properties中添加如下配置。

      android.enableR8=false
    2. Android Gradle Plugin 7.0以上

      1. 在項目根目錄的build.gradle中添加如下ProGuard Gradle Plugin配置。

        buildscript {
            repositories {
                // For the Android Gradle plugin.
                google()
                // For the ProGuard Gradle Plugin.
                mavenCentral()
            }
            dependencies {
                // The Android Gradle plugin.
                classpath("com.android.tools.build:gradle:x.y.z")
                // The ProGuard Gradle plugin.
                classpath("com.guardsquare:proguard-gradle:7.1.+")
            }
        }
      2. 在app目錄的build.gradle中應用ProGuard Gradle Plugin。

        apply plugin: 'com.guardsquare.proguard'
      3. 然后,關閉R8混淆。

        android {
           buildTypes {
               release {
                   // 關閉 R8.
                   minifyEnabled false
               }
           }
        }
      4. 最后,配置ProGuard混淆。

        android {
           ...
        }
        
        proguard {
           configurations {
               release {
                   defaultConfiguration 'proguard-android.txt'
                   configuration 'proguard-rules.pro'
               }
               debug {
                   defaultConfiguration 'proguard-android-debug.txt'
                   configuration 'proguard-rules.pro'
               }
           }
        }
  6. 初始化

    initialize的調用應該盡可能的早,必須在Application.attachBaseContext()的最開始(在super.attachBaseContext之后,如果有Multidex,也需要在Multidex.install之后)進行SDK初始化操作,初始化之前不能用到其他自定義類,否則極有可能導致崩潰。而查詢服務器是否有可用補丁的操作可以在后面的任意地方。不建議在Application.onCreate()中初始化,因為如果帶有ContentProvider,就會使得Sophix初始化時機太遲從而引發問題。

    以下為快速接入的初始化方式,直接在已有Application中添加以下代碼即可。我們更推薦使用SDK穩健接入,采用穩健接入后修復范圍更廣,穩定性更高。

    // initialize必須放在attachBaseContext最前面,初始化代碼直接寫在Application類里面,切勿封裝到其他類。
    SophixManager.getInstance().setContext(this)
                    .setAppVersion(appVersion)
                    .setAesKey(null)
                    .setEnableDebug(true)
                    .setPatchLoadStatusStub(new PatchLoadStatusListener() {
                        @Override
                        public void onLoad(final int mode, final int code, final String info, final int handlePatchVersion) {
                            // 補丁加載回調通知
                            if (code == PatchStatus.CODE_LOAD_SUCCESS) {
                                // 表明補丁加載成功
                            } else if (code == PatchStatus.CODE_LOAD_RELAUNCH) {
                                // 表明新補丁生效需要重啟. 開發者可提示用戶或者強制重啟;
                                // 建議: 用戶可以監聽進入后臺事件, 然后調用killProcessSafely結束進程,以此加快應用補丁。
                            } else {
                                // 其它錯誤信息, 查看PatchStatus類說明
                            }
                        }
                    }).initialize();
    // queryAndLoadNewPatch不可放在attachBaseContext 中,否則無網絡權限,建議放在后面任意時刻,如onCreate中
    SophixManager.getInstance().queryAndLoadNewPatch();