bugly集成会影响上线appstore store吗

&nbsp>&nbsp
&nbsp>&nbsp
&nbsp>&nbsp
iOS bugly集成报错
摘要:iOSbugly手动集成文档真实烂。集成的时候一堆错误:Undefinedsymbolsforarchitecturearm64:“OBJC_CLASS$_JSContext”,referencedfrom:objc-class-refinBugly(libBugly.a-arm64-master.o)ld:symbol(s)notfoundforarchitecturearm64&std::__1::__basic_string_common::__throw_l
iOS bugly手动集成文档真实烂。
集成的时候一堆错误:
Undefined symbols for architecture arm64:“OBJC_CLASS$_JSContext”, referenced from:objc-class-ref in Bugly(libBugly.a-arm64-master.o)ld: symbol(s) not found for architecture arm64
&std::__1::__basic_string_common
::__throw_length_error() const&, referenced from:
std::__1::enable_if&__is_forward_iterator
::value, void&::type std::__1::basic_string
<char, std::__1::char_traits
, std::__1::allocator
(char*, char*) in Bugly(libBugly.a-i386-master.o)
&std::__1::locale::use_facet(std::__1::locale::id&;) const&, referenced from:
std::__1::basic_ostream
<char, std::__1::char_traits
&&; std::__1::__put_character_sequence
<char, std::__1::char_traits
&(std::__1::basic_ostream
<char, std::__1::char_traits
&&;, char const*, unsigned long) in Bugly(libBugly.a-i386-master.o)
&std::__1::ios_base::getloc() const&, referenced from:
std::__1::basic_ostream
<char, std::__1::char_traits
&&; std::__1::__put_character_sequence
<char, std::__1::char_traits
&(std::__1::basic_ostream
<char, std::__1::char_traits
&&;, char const*, unsigned long) in Bugly(libBugly.a-i386-master.o)
&std::runtime_error::runtime_error(char const*)&, referenced from:
analyticswup::UniPacket
::decode(char const*, unsigned long) in Bugly(libBugly.a-i386-master.o)
analyticswup::UniPacket
::doEncode(analyticstaf::JceOutputStream
&;) in Bugly(libBugly.a-i386-master.o)
&std::runtime_error::runtime_error(std::__1::basic_string
<char, std::__1::char_traits
, std::__1::allocator
& const&;)&, referenced from:
void analyticswup::UniAttribute
(std::__1::basic_string
<char, std::__1::char_traits
, std::__1::allocator
& const&;, rqd::ResponsePkg&;) in Bugly(libBugly.a-i386-master.o)
看下是不是少了JavaScriptCore.framework和libc++.tbd,实在不行就跟他demo对比下。
以上是的内容,更多
的内容,请您使用右上方搜索功能获取相关信息。
若你要投稿、删除文章请联系邮箱:zixun-group@service.aliyun.com,工作人员会在五个工作日内给你回复。
云服务器 ECS
可弹性伸缩、安全稳定、简单易用
&40.8元/月起
预测未发生的攻击
&24元/月起
为您提供0门槛上云实践机会
你可能还喜欢
你可能感兴趣
阿里云教程中心为您免费提供
iOS bugly集成报错相关信息,包括
的信息,所有iOS bugly集成报错相关内容均不代表阿里云的意见!投稿删除文章请联系邮箱:zixun-group@service.aliyun.com,工作人员会在五个工作日内答复
售前咨询热线
服务与支持
资源和社区
关注阿里云
International2218人阅读
开发证书和账号(13)
iOS 开发 腾讯bugly(上线后崩溃追踪)集成指南–2106最新版
首先要去腾讯开放平台注册APP 获取appid 和appkey
cocoapods集成
1.Podfile文件
platform :ios, ‘8.0’
target 'demo' do
pod 'Masonry'
pod 'AFNetworking'
pod 'SDWebImage'
pod 'SVProgressHUD'
pod 'Bugly'
2.终端–cd 到项目文件
pod search bugly
pod install
SystemConfiguration.framework
Security.framework
libz.dylib
3.在工程的AppDelegate.m文件导入头文件
#import &Bugly/Bugly.h&
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[Bugly startWithAppId:@"此处替换为你在腾讯注册的AppId"];
return YES;
自动集成符号配置表
仔细阅读符号表工具iOS版–使用指南
打开工具包中的dSYM_upload.sh,复制所有内容,在新增的Run Scrpit Phase中粘贴
修改新增的Run Scrpit中的 & 为您的App ID,&为您的App Key,& 为App的Bundle Id
BUGLY_APP_ID="你的APP_ID"
BUGLY_APP_KEY="你的APP_KEY"
BUNDLE_IDENTIFIER="你的bundle id"
UPLOAD_DSYM_ONLY=1
UPLOAD_DEBUG_SYMBOLS=1
UPLOAD_SIMULATOR_SYMBOLS=1
BUGLY_DSYM_UPLOAD_DOMAIN="api.bugly.qq.com"
BUGLY_SYMBOL_JAR_PATH="dsymtool/buglySymboliOS.jar"
if [ ! -f "${BUGLY_SYMBOL_JAR_PATH}" ]; then
BUGLY_SYMBOL_JAR_PATH="$HOME/bin/buglySymboliOS.jar"
function exitWithMessage(){
echo "--------------------------------"
echo "${1}"
echo "--------------------------------"
function dSYMUpload() {
P_APP_ID="$1"
P_APP_KEY="$2"
P_APP_BUNDLE_ID="$3"
P_APP_VERSION="$4"
P_BSYMBOL_ZIP_FILE="$5"
P_BSYMBOL_ZIP_FILE_NAME=${P_BSYMBOL_ZIP_FILE##*/}
P_BSYMBOL_ZIP_FILE_NAME=${P_BSYMBOL_ZIP_FILE_NAME//&/_}
P_BSYMBOL_ZIP_FILE_NAME="${P_BSYMBOL_ZIP_FILE_NAME// /_}"
DSYM_UPLOAD_URL="https://${BUGLY_DSYM_UPLOAD_DOMAIN}/openapi/file/upload/symbol?app_id=${P_APP_ID}&app_key=${P_APP_KEY}"
echo "dSYM upload url: ${DSYM_UPLOAD_URL}"
echo "-----------------------------"
STATUS=$(/usr/bin/curl -k "${DSYM_UPLOAD_URL}" --form "api_version=1" --form "app_id=${P_APP_ID}" --form "app_key=${P_APP_KEY}" --form "symbolType=2"
--form "bundleId=${BUNDLE_IDENTIFIER}" --form "productVersion=${BUGLY_APP_VERSION}" --form "fileName=${P_BSYMBOL_ZIP_FILE_NAME}" --form "file=@${P_BSYMBOL_ZIP_FILE}" --verbose)
echo "-----------------------------"
UPLOAD_RESULT="FAILTURE"
echo "Bugly server response: ${STATUS}"
if [ ! "${STATUS}" ]; then
echo "Error: Failed to upload the zip archive file."
elif [[ "${STATUS}" == *"{\"reponseCode\":\"0\"}"* ]]; then
echo "Success to upload the dSYM for the app [${BUNDLE_IDENTIFIER} ${BUGLY_APP_VERSION}]"
UPLOAD_RESULT="SUCCESS"
echo "Error: Failed to upload the zip archive file to Bugly."
if [ "$?" -ne 0 ]; then
exitWithMessage "Error: Failed to remove temporary zip archive." 0
echo "--------------------------------"
echo "${UPLOAD_RESULT} - dSYM upload complete."
if [[ "${UPLOAD_RESULT}" == "FAILTURE" ]]; then
echo "--------------------------------"
echo "Failed to upload the dSYM"
echo "Please check the script and try it again."
function dSYMParse() {
DSYM_FILE="$1"
DSYM_SYMBOL_FILE="$2"
echo "--------------------------------"
echo "Extract symbol info from .dSYM file. to ${DSYM_SYMBOL_FILE}"
(/usr/bin/java -Xms512m -Xmx1024m -Dfile.encoding=UTF8 -jar "${BUGLY_SYMBOL_JAR_PATH}" -i "${DSYM_FILE}" -o "${DSYM_SYMBOL_FILE}" ) || exitWithMessage "Error: Failed to extract symbols." 1
echo "--------------------------------"
function run() {
CONFIG_BUGLY_APP_ID="$1"
CONFIG_BUGLY_APP_KEY="$2"
CONFIG_BUGLY_APP_BUNDLE_IDENTIFIER="$3"
CONFIG_BUGLY_APP_VERSION="$4"
CONFIG_DSYM_SOURCE_DIR="$5"
CONFIG_DSYM_DEST_DIR="$6"
CONFIG_UPLOAD_DSYM_ONLY="$7"
if [ ! "${CONFIG_BUGLY_APP_ID}" ]; then
exitWithMessage "Error: Bugly App ID not defined. Please set 'BUGLY_APP_ID' " 0
if [[ "${CONFIG_BUGLY_APP_ID}" == *"App ID"* ]]; then
exitWithMessage "Error: Bugly App ID not defined." 0
if [ ! "${CONFIG_BUGLY_APP_KEY}" ]; then
exitWithMessage "Error: Bugly App Key not defined." 0
if [ ! "${CONFIG_BUGLY_APP_BUNDLE_IDENTIFIER}" ]; then
exitWithMessage "Error: Bundle Identifier not defined." 0
if [ ! "${CONFIG_BUGLY_APP_VERSION}" ]; then
exitWithMessage "Error: App Version not defined." 0
if [ ! -e "${CONFIG_DSYM_SOURCE_DIR}" ]; then
exitWithMessage "Error: Invalid dir ${CONFIG_DSYM_SOURCE_DIR}" 0
if [ ! "${CONFIG_DSYM_DEST_DIR}" ]; then
exitWithMessage "Error: Invalid dir ${CONFIG_DSYM_DEST_DIR}" 0
if [ ! -e "${CONFIG_DSYM_DEST_DIR}" ]; then
mkdir ${CONFIG_DSYM_DEST_DIR}
DSYM_FOLDER="${CONFIG_DSYM_SOURCE_DIR}"
echo "Scaning dSYM FOLDER: ${DSYM_FOLDER} ..."
for dsymFile in $(find "$DSYM_FOLDER" -name '*.dSYM'); do
echo "Found dSYM file: $dsymFile"
DSYM_FILE_NAME=${dsymFile##*/}
DSYM_SYMBOL_ZIP_FILE_NAME="${DSYM_FILE_NAME}.zip"
DSYM_SYMBOL_ZIP_FILE_NAME="${DSYM_SYMBOL_ZIP_FILE_NAME// /_}"
DSYM_SYMBOL_ZIP_FILE=${CONFIG_DSYM_DEST_DIR}/${DSYM_SYMBOL_ZIP_FILE_NAME}
if [ $CONFIG_UPLOAD_DSYM_ONLY -eq 1 ]; then
if [ -e $DSYM_SYMBOL_ZIP_FILE ]; then
rm -f $DSYM_SYMBOL_ZIP_FILE
zip -r -j $DSYM_SYMBOL_ZIP_FILE $dsymFile -x *.plist
dSYMParse $dsymFile $DSYM_SYMBOL_ZIP_FILE
dSYMUpload $CONFIG_BUGLY_APP_ID $CONFIG_BUGLY_APP_KEY $CONFIG_BUGLY_APP_BUNDLE_IDENTIFIER $CONFIG_BUGLY_APP_VERSION $DSYM_SYMBOL_ZIP_FILE
if [ $RET = "F" ]; then
exitWithMessage "No .dSYM found in ${DSYM_FOLDER}" 0
function runInXcode(){
echo "Uploading dSYM to Bugly in Xcode ..."
echo "Info.Plist : ${INFOPLIST_FILE}"
BUNDLE_VERSION=$(/usr/libexec/PlistBuddy -c 'Print CFBundleVersion' "${INFOPLIST_FILE}")
BUNDLE_SHORT_VERSION=$(/usr/libexec/PlistBuddy -c 'Print CFBundleShortVersionString' "${INFOPLIST_FILE}")
if [ ! "${CUSTOMIZED_APP_VERSION}" ]; then
BUGLY_APP_VERSION="${BUNDLE_SHORT_VERSION}(${BUNDLE_VERSION})"
BUGLY_APP_VERSION="${CUSTOMIZED_APP_VERSION}"
echo "--------------------------------"
echo "Prepare application information."
echo "--------------------------------"
echo "Product Name: ${PRODUCT_NAME}"
echo "Bundle Identifier: ${BUNDLE_IDENTIFIER}"
echo "Version: ${BUNDLE_SHORT_VERSION}"
echo "Build: ${BUNDLE_VERSION}"
echo "Bugly App ID: ${BUGLY_APP_ID}"
echo "Bugly App key: ${BUGLY_APP_KEY}"
echo "Bugly App Version: ${BUGLY_APP_VERSION}"
echo "--------------------------------"
echo "Check the arguments ..."
if [ "$EFFECTIVE_PLATFORM_NAME" == "-iphonesimulator" ]; then
if [ $UPLOAD_SIMULATOR_SYMBOLS -eq 0 ]; then
exitWithMessage "Warning: Build for simulator and skipping to upload. \nYou can modify 'UPLOAD_SIMULATOR_SYMBOLS' to 1 in the script." 0
if [ "${CONFIGURATION=}" == "Debug" ]; then
if [ $UPLOAD_DEBUG_SYMBOLS -eq 0 ]; then
exitWithMessage "Warning: Build for debug mode and skipping to upload. \nYou can modify 'UPLOAD_DEBUG_SYMBOLS' to 1 in the script." 0
if [ $UPLOAD_ARCHIVE_ONLY -eq 1 ]; then
if [[ "$TARGET_BUILD_DIR" == *"/Archive"* ]]; then
echo "Archive the package"
exitWithMessage "Warning: Build for NOT Archive mode and skipping to upload. \nYou can modify 'UPLOAD_ARCHIVE_ONLY' to 0 in the script." 0
run ${BUGLY_APP_ID} ${BUGLY_APP_KEY} ${BUNDLE_IDENTIFIER} ${BUGLY_APP_VERSION} ${DWARF_DSYM_FOLDER_PATH} ${BUILD_DIR}/BuglySymbolTemp ${UPLOAD_DSYM_ONLY}
INFO_PLIST_FILE="${INFOPLIST_FILE}"
BuildInXcode="F"
if [ -f "${INFO_PLIST_FILE}" ]; then
BuildInXcode="T"
if [ $BuildInXcode = "T" ]; then
runInXcode
echo "\nUsage: dSYMUpload.sh &bugly_app_id& &bugly_app_key& &app_bundle_identifier& &app_version& &dSYM_src_dir& &bSYMBOL_dest_dir& [upload_dsym_only]\n"
BUGLY_APP_ID="$1"
BUGLY_APP_KEY="$2"
BUNDLE_IDENTIFIER="$3"
BUGLY_APP_VERSION="$4"
DWARF_DSYM_FOLDER_PATH="$5"
SYMBOL_OUTPUT_PATH="$6"
UPLOAD_DSYM_ONLY=$7
run ${BUGLY_APP_ID} ${BUGLY_APP_KEY} ${BUNDLE_IDENTIFIER} ${BUGLY_APP_VERSION} ${DWARF_DSYM_FOLDER_PATH} ${SYMBOL_OUTPUT_PATH} ${UPLOAD_DSYM_ONLY}
脚本直接上传dSYM文件
脚本直接上传dSYM文件
生成XXX.app.dsYM.zip包,上传上去
文章:141篇
阅读:137105
阅读:7501他的最新文章
他的热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)热更新:使用Bugly集成的Tinker - 简书
热更新:使用Bugly集成的Tinker
有了Bugly帮助我们集成,那么我们就无需过多去关心Tinker是如何配置的,因为其配置太麻烦了。只是在遇到一些特别的问题时,我们不妨去看看微信Tinker的帮助文档!
第一步:在总工程的build.grade下面添加依赖
buildscript {
repositories {
dependencies {
// tinkersupport插件, 其中lastest.release指拉取最新版本,也可以指定明确版本号,例如1.0.4
classpath "com.tencent.bugly:tinker-support:latest.release"
第二步:在当前Modle的build.grade中集成SDK
dependencies {
compile "com.android.support:multidex:1.0.1" // 多dex配置
compile 'com.tencent.bugly:crashreport_upgrade:latest.release' // 升级SDK
并在最上面加入依赖插件脚本
apply from: 'tinker-support.gradle'
这个脚本需要自己在当前Model的根目录下创建,要和build.grade在同一文件夹
QQ截图28.png
tinker-support.gradle里面的内容如下:
apply plugin: 'com.tencent.bugly.tinker-support'
def bakPath = file("${buildDir}/bakApk/")
* 此处填写每次构建生成的基准包目录
def baseApkDir = "app--00"
* 对于插件各参数的详细解析请参考
tinkerSupport {
// 开启tinker-support插件,默认值true
enable = true
// 指定归档目录,默认值当前module的子目录tinker
autoBackupApkDir = "${bakPath}"
// 是否启用覆盖tinkerPatch配置功能,默认值false
// 开启后tinkerPatch配置不生效,即无需添加tinkerPatch
overrideTinkerPatchConfiguration = true
// 编译补丁包时,必需指定基线版本的apk,默认值为空
// 如果为空,则表示不是进行补丁包的编译
// @{link tinkerPatch.oldApk }
baseApk = "${bakPath}/${baseApkDir}/app-release.apk"
// 对应tinker插件applyMapping
baseApkProguardMapping = "${bakPath}/${baseApkDir}/app-release-mapping.txt"
// 对应tinker插件applyResourceMapping
baseApkResourceMapping = "${bakPath}/${baseApkDir}/app-release-R.txt"
// 构建基准包和补丁包都要指定不同的tinkerId,并且必须保证唯一性
tinkerId = "base-1.0.1"
// 构建多渠道补丁时使用
// buildAllFlavorsDir = "${bakPath}/${baseApkDir}"
// 是否开启反射Application模式
enableProxyApplication = false
* 一般来说,我们无需对下面的参数做任何的修改
* 对于各参数的详细介绍请参考:
* https://github.com/Tencent/tinker/wiki/Tinker-%E6%8E%A5%E5%85%A5%E6%8C%87%E5%8D%97
tinkerPatch {
//oldApk ="${bakPath}/${appName}/app-release.apk"
ignoreWarning = false
useSign = true
dexMode = "jar"
pattern = ["classes*.dex"]
loader = []
pattern = ["lib/*/*.so"]
pattern = ["res/*", "r/*", "assets/*", "resources.arsc", "AndroidManifest.xml"]
ignoreChange = []
largeModSize = 100
packageConfig {
sevenZip {
zipArtifact = "com.tencent.mm:SevenZip:1.1.10"
path = "/usr/local/bin/7za"
buildConfig {
keepDexApply = false
//tinkerId = "1.0.1-base"
//applyMapping = "${bakPath}/${appName}/app-release-mapping.txt" //
可选,设置mapping文件,建议保持旧apk的proguard混淆方式
//applyResourceMapping = "${bakPath}/${appName}/app-release-R.txt" // 可选,设置R.txt文件,通过旧apk文件保持ResId的分配
更详细的配置项参考
注意这个文件中配置了enableProxyApplication = false
意思就是是否开启反射Application模式,默认为false
这是Tinker推荐的接入方式,一定程度上会增加接入成本,但具有更好的兼容性。
第三步:初始化SDK
分两种情况来进行初始化
情况一(推荐):enableProxyApplication = false
需要我们自定义的MyApplication继承TinkerApplication
public class SampleApplication extends TinkerApplication {
public SampleApplication() {
super(ShareConstants.TINKER_ENABLE_ALL, "xxx.xxx.SampleApplicationLike",
"com.tencent.tinker.loader.TinkerLoader", false);
注意:这个类集成TinkerApplication类,这里面不做任何操作,所有Application的代码都会放到ApplicationLike继承类当中
四个参数解析
参数1:tinkerFlags 表示Tinker支持的类型 dex only、library only or all suuport,default: TINKER_ENABLE_ALL
参数2:delegateClassName Application代理类 这里填写你自定义的ApplicationLike
参数3:loaderClassName Tinker的加载器,使用默认即可
参数4:tinkerLoadVerifyFlag 加载dex或者lib是否验证md5,默认为false
这里需要重新写一个ApplicationLike来继承DefaultApplicationLike
public class SampleApplicationLike extends DefaultApplicationLike {
public static final String TAG = "Tinker.SampleApplicationLike";
public SampleApplicationLike(Application application, int tinkerFlags,
boolean tinkerLoadVerifyFlag, long applicationStartElapsedTime,
long applicationStartMillisTime, Intent tinkerResultIntent) {
super(application, tinkerFlags, tinkerLoadVerifyFlag, applicationStartElapsedTime, applicationStartMillisTime, tinkerResultIntent);
public void onCreate() {
super.onCreate();
// 这里实现SDK初始化,appId替换成你的在Bugly平台申请的appId
// 调试时,将第三个参数改为true
Bugly.init(getApplication(), "", false);
@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
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);
注意:这里发现官方文档的一个bug,在onCreate中进行了Bugly.init(this, "", false);也就是Bugly调试的初始化,但是里面第一个参数是要传入上下文的,而SampleApplicationLike 只是一个抽象类的实现类。这段应该放在MyApplication的OnCreate()方法中才对,所以这里注释掉了!
(其实在这里可以使用getApplication()来获取上下文替换this,多谢小巫的提醒。)
情况二(简单):enableProxyApplication = true
public class MyApplication extends Application {
public void onCreate() {
super.onCreate();
// 这里实现SDK初始化,appId替换成你的在Bugly平台申请的appId
// 调试时,将第三个参数改为true
Bugly.init(this, "", false);
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
// you must install multiDex whatever tinker is installed!
MultiDex.install(base);
// 安装tinker
Beta.installTinker();
注:无须你改造Application,主要是为了降低接入成本,我们插件会动态替换AndroidMinifest文件中的Application为我们定义好用于反射真实Application的类(需要您接入SDK 1.2.2版本 和 插件版本 1.0.3以上)。
第四步:AndroidManifest.xml的配置
1.权限配置
&uses-permission android:name="android.permission.READ_PHONE_STATE" /&
&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" /&
&uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /&
&uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/&
注意:如果你也想使用Bugly升级功能,你必须要进行2、3项的配置,而如果你只想使用热更新能力,你只需要配置权限即可。
2. Activity配置
android:name="com.tencent.bugly.beta.ui.BetaActivity"
android:theme="@android:style/Theme.Translucent" /&
3. 配置FileProvider
注意:如果您想兼容Android N或者以上的设备,必须要在AndroidManifest.xml文件中配置FileProvider来访问共享路径的文件。如果你使用的第三方库也配置了同样的FileProvider,你需要将第三方库配置的路径copy到我们配置的provider_path文件下。
android:name="android.support.v4.content.FileProvider"
android:authorities="${applicationId}.fileProvider"
android:exported="false"
android:grantUriPermissions="true"&
&meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/provider_paths"/&
&/provider&
${applicationId}请替换为您的包名,例如com.bugly.upgrade.demo。这里要注意一下,FileProvider类是在support-v4包中的,检查你的工程是否引入该类库。
在res目录新建xml文件夹,创建provider_paths.xml文件如下:
&?xml version="1.0" encoding="utf-8"?&
&paths xmlns:android="http://schemas.android.com/apk/res/android"&
&!-- /storage/emulated/0/Download/${applicationId}/.beta/apk--&
&external-path name="beta_external_path" path="Download/"/&
&!--/storage/emulated/0/Android/data/${applicationId}/files/apk/--&
&external-path name="beta_external_files_path" path="Android/data/"/&
这里配置的两个外部存储路径是升级SDK下载的文件可能存在的路径,一定要按照上面格式配置,不然可能会出现错误。
第五步:混淆配置 (没有混淆的可以忽略)
为了避免混淆SDK,在Proguard混淆文件中增加以下配置:
-dontwarn com.tencent.bugly.**
-keep public class com.tencent.bugly.**{*;}
如果你使用了support-v4包,你还需要配置以下混淆规则:
-keep class android.support.**{*;}
到这里差不多就结束了,其实配置真的很繁琐,都是Bugly帮我们简化了很多地方了。
下面就是我们自己去实践的时间了:
用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金Cover 有什么料? 从这篇文章中你能获得这些料: 知道setContentView()之后发生了什么? ... Android 获取 View 宽高的常用正确方式,避免为零 - 掘金相信有很多朋友...
前言 热更新能力是Bugly为解决开发者紧急修复线上bug,而无需重新发版让用户无感知就能把问题修复的一项能力。Bugly目前采用微信Tinker的开源方案,开发者只需要集成我们提供的SDK就可以实现自动下载补丁包、合成、并应用补丁的功能,我们也提供了热更新管理后台让开发者...
腾讯Bugly,为移动开发者提供专业的异常上报和运营统计,帮助开发者快速发现并解决异常,同时掌握产品运营动态,及时跟进用户反馈。 Bugly主要功能有异常上报、运营统计和应用升级(包含热更新和全包更新),这些功能在官网上都有对应的开发文档可供参考,并且在热更新模块还录有专门...
用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金 Cover 有什么料? 从这篇文章中你能获得这些料: 知道setContentView()之后发生了什么? ... Android 获取 View 宽高的常用正确方式,避免为零 - 掘金 相信有很多...
在介绍Bugly之前,需要先向大家简单介绍下一些热更新的相关内容。当前市面的热补丁方案有很多,其中比较出名的有阿里的AndFix、美团的Robust以及QZone的超级补丁方案。但它们都存在无法解决的问题,这也是Tinker面世的原因。Tinker目前已运行在微信...
文/不不不不不不热 01 北方十二月的天,白茫茫的雪铺天盖地落下,把整片田野埋的死死的,周围一片死寂,只有呼呼的风声。 远远望去,只有几根枯树残枝在风雪中摇曳,树干已被埋了半截。 我和父亲走在山间的小路上,他在前,我在后,脸上被风刮的生疼,呼出的热气在围巾上凝了厚厚一层冰霜...
有没有发现颈纹越来越重,手掌时常胀胀的,眼睛酸酸涩涩的,就像吸食了毒品一样,隔段时间不用它,就觉得空虚难受,没错,如果你有这些症状,那么就是中了手机的毒! 为什么我要用这大好时光写一篇老生常谈的文章来抨击离不开手机的生活,因为我也中过这种毒。 从前,每天下班后的欢快时光就是...
我前几天在简书写了一篇文章《物理系的我,反抗传统,自学英语,超过英语专八》。很多人看了我的经历,表示很佩服。他们只看到我的一面,其实我有很多很多的缺点,只是我在努力克服。现在就来谈谈我顽固懒惰的一面。 我读初中的时候,镇上开始出现电脑,那是2003年。我父母常听说孩子沉迷...

我要回帖

更多关于 苹果上线 appstore 的文章

 

随机推荐