Tencent / tinker

Tinker is a hot-fix solution library for Android, it supports dex, library and resources update without reinstall apk.
Other
17.1k stars 3.33k forks source link

tinker load failed #1620

Open jupitar opened 2 years ago

jupitar commented 2 years ago

异常类型:app运行时异常

手机型号:如:Nexus 5(如是编译异常,则可以不填)

手机系统版本:如:Android 7.1.2(模拟器)

tinker版本:如:1.9.9(compile 'com.tencent.tinker:tinker-android-lib:1.9.9')

gradle版本:如:4.10.2

是否使用热更新SDK: TinkerPatch SDK

系统:如:win10

问题描述:app集成了热更新,但是启动的时候没有上报baseid信息,提示tinker load failed。下面是启动日志 2021-12-01 10:49:12.137 4406-4406/? D/houdini: [4406] Initialize library(version: 7.1.1b_x.49852 RELEASE)... successfully. 2021-12-01 10:49:12.138 4406-4406/? W/art: Unexpected CPU variant for X86 using defaults: x86 2021-12-01 10:49:12.169 4406-4406/com.sunny.yjjh_management.debug W/Tinker.TinkerLoader: tryLoadPatchFiles:patch dir not exist:/data/user/0/com.sunny.yjjh_management.debug/tinker 2021-12-01 10:49:12.169 4406-4406/com.sunny.yjjh_management.debug D/Tinker.DefaultAppLike: onBaseContextAttached: 2021-12-01 10:49:12.169 4406-4406/com.sunny.yjjh_management.debug I/Tinker.ReflectApp: with app realApplication from manifest applicationName:com.sunny.yjjh_management.application.SampleApplication 2021-12-01 10:49:12.170 4406-4406/com.sunny.yjjh_management.debug W/Tinker.TinkerLoader: tryLoadPatchFiles:patch dir not exist:/data/user/0/com.sunny.yjjh_management.debug/tinker 2021-12-01 10:49:12.171 4406-4406/com.sunny.yjjh_management.debug D/Tinker.DefaultAppLike: onBaseContextAttached: 2021-12-01 10:49:12.172 4406-4406/com.sunny.yjjh_management.debug I/Tinker.TinkerPatchListener: application maxMemory:128 2021-12-01 10:49:12.172 4406-4406/com.sunny.yjjh_management.debug W/Tinker.Tinker: tinker patch directory: /data/user/0/com.sunny.yjjh_management.debug/tinker 2021-12-01 10:49:12.172 4406-4406/com.sunny.yjjh_management.debug I/Tinker.Tinker: try to install tinker, isEnable: true, version: 1.9.9 2021-12-01 10:49:12.173 4406-4406/com.sunny.yjjh_management.debug I/Tinker.TinkerLoadResult: parseTinkerResult loadCode:-2, process name:com.sunny.yjjh_management.debug, main process:true, systemOTA:false, fingerPrint:HUAWEI/TAS-AN00/TAS-AN00:7.1.2/TAS-AN00/700210421:user/release-keys, oatDir:null, useInterpretMode:false 2021-12-01 10:49:12.173 4406-4406/com.sunny.yjjh_management.debug W/Tinker.TinkerLoadResult: can't find patch file, is ok, just return 2021-12-01 10:49:12.173 4406-4406/com.sunny.yjjh_management.debug I/Tinker.DefaultLoadReporter: patch loadReporter onLoadResult: patch load result, path:/data/user/0/com.sunny.yjjh_management.debug/tinker, code: -2, cost: 0ms 2021-12-01 10:49:12.173 4406-4406/com.sunny.yjjh_management.debug W/Tinker.Tinker: tinker load fail! 2021-12-01 10:49:12.181 4406-4406/com.sunny.yjjh_management.debug E/Tinker.ReflectApp: replaceApplicationLike delegateClass:class com.tencent.bugly.beta.tinker.TinkerApplicationLike

集成方式代码 public class SampleApplication extends TinkerApplication { public SampleApplication() { super(ShareConstants.TINKER_ENABLE_ALL, "com.jupitarwp.myapplication.application.SampleApplicationLike", "com.tencent.tinker.loader.TinkerLoader", false); } }

public class SampleApplicationLike extends DefaultApplicationLike {

public static final String TAG = "Tinker.SampleApplicationLike";
private final Handler myHandler = new Handler();

public SampleApplicationLike(Application application, int tinkerFlags,
                             boolean tinkerLoadVerifyFlag, long applicationStartElapsedTime,
                             long applicationStartMillisTime, Intent tinkerResultIntent) {
    super(application, tinkerFlags, tinkerLoadVerifyFlag, applicationStartElapsedTime, applicationStartMillisTime, tinkerResultIntent);
}

@Override
public void onCreate() {
    super.onCreate();

// // 设置是否开启热更新能力,默认为true // Beta.enableHotfix = true; // // 设置是否自动下载补丁,默认为true // Beta.canAutoDownloadPatch = true; // // 设置是否自动合成补丁,默认为true // Beta.canAutoPatch = true; // // 设置是否提示用户重启,默认为false // Beta.canNotifyUserRestart = true; // 这里实现SDK初始化,appId替换成你的在Bugly平台申请的appId // 调试时,将第三个参数改为true intBugly();

}

@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
@Override
public void onBaseContextAttached(Context base) {
    super.onBaseContextAttached(base);
    // you must install multiDex whatever tinker is installed!
    MultiDex.install(base);

    // 安装tinker
    // TinkerManager.installTinker(this); 替换成下面Bugly提供的方法
    Beta.installTinker(this);
}

@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
public void registerActivityLifecycleCallback(Application.ActivityLifecycleCallbacks callbacks) {
    getApplication().registerActivityLifecycleCallbacks(callbacks);
}

private void intBugly() {
    CrashReport.initCrashReport(getApplication(), "1fa4f76ec9", true);
}

} 配置文件代码: <manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="com.jupitarwp.myapplication">

<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_LOGS"
    tools:ignore="ProtectedPermissions" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

<application
    android:allowBackup="true"
    android:name=".application.SampleApplication"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/Theme.MyApplication">
    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity
        android:name="com.tencent.bugly.beta.ui.BetaActivity"
        android:configChanges="keyboardHidden|orientation|screenSize|locale"
        android:theme="@android:style/Theme.Translucent" />
</application>