2017-03-09 20 views
0

我试图在发布模式下运行我的反应原生应用程序。 APK是按照文档签名的,并且第一次运行正常(在模拟器和实际设备中)。React Native签名版本构建,但无法启动

尽管一些更新(添加库,改变gradle这个配置,开发更多的代码)释放安装不工作后:

  • 在调试模式下,所有工程确定(建设,模拟器和真正的手机)
  • 在释放模式在启动(模拟器和真正的手机)

在我看到下面的错误日志中建立正常,但应用程序崩溃

这里是我的版本文件夹下的AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:tools="http://schemas.android.com/tools" 
     package="com.myfakeappname"> 

     <application 
     android:name=".MainApplication" 
     > 

     </application> 
</manifest> 

编辑:添加proguard-rules.pro

# Add project specific ProGuard rules here. 
# By default, the flags in this file are appended to flags specified 
# in /usr/local/Cellar/android-sdk/24.3.3/tools/proguard/proguard-android.txt 
# You can edit the include path and order by changing the proguardFiles 
# directive in build.gradle. 
# 
# For more details, see 
# http://developer.android.com/guide/developing/tools/proguard.html 

# Add any project specific keep options here: 

# If your project uses WebView with JS, uncomment the following 
# and specify the fully qualified class name to the JavaScript interface 
# class: 
#-keepclassmembers class fqcn.of.javascript.interface.for.webview { 
# public *; 
#} 

# Disabling obfuscation is useful if you collect stack traces from production crashes 
# (unless you are using a system that supports de-obfuscate the stack traces). 
-dontobfuscate 

# React Native 

# Keep our interfaces so they can be used by other ProGuard rules. 
# See http://sourceforge.net/p/proguard/bugs/466/ 
-keep,allowobfuscation @interface com.facebook.proguard.annotations.DoNotStrip 
-keep,allowobfuscation @interface com.facebook.proguard.annotations.KeepGettersAndSetters 
-keep,allowobfuscation @interface com.facebook.common.internal.DoNotStrip 

# Do not strip any method/class that is annotated with @DoNotStrip 
-keep @com.facebook.proguard.annotations.DoNotStrip class * 
-keep @com.facebook.common.internal.DoNotStrip class * 
-keepclassmembers class * { 
    @com.facebook.proguard.annotations.DoNotStrip *; 
    @com.facebook.common.internal.DoNotStrip *; 
} 

-keepclassmembers @com.facebook.proguard.annotations.KeepGettersAndSetters class * { 
    void set*(***); 
    *** get*(); 
} 

-keep class * extends com.facebook.react.bridge.JavaScriptModule { *; } 
-keep class * extends com.facebook.react.bridge.NativeModule { *; } 
-keepclassmembers,includedescriptorclasses class * { native <methods>; } 
-keepclassmembers class * { @com.facebook.react.uimanager.UIProp <fields>; } 
-keepclassmembers class * { @com.facebook.react.uimanager.annotations.ReactProp <methods>; } 
-keepclassmembers class * { @com.facebook.react.uimanager.annotations.ReactPropGroup <methods>; } 

-dontwarn com.facebook.react.** 

# okhttp 

-keepattributes Signature 
-keepattributes *Annotation* 
-keep class okhttp3.** { *; } 
-keep interface okhttp3.** { *; } 
-dontwarn okhttp3.** 

# okio 

-keep class sun.misc.Unsafe { *; } 
-dontwarn java.nio.file.* 
-dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement 
-dontwarn okio.** 
+1

请确保您在java/com/myfakeappname /(相对于AndroidManifest)中有一个MainApplication,并且在顶部有: package com.myfakeappname; – atlanteh

回答

0

最有可能你启用ProGuard,并将一些类被混淆,使他们不在运行时发现。

尝试在发布配置中禁用它,然后重试。如果你需要,发布你的proguard.properties文件。

+0

禁用proguard确实有效。我要用proguar-rules.pro编辑这个问题 – stilllife

+0

你发布的帖子看起来不错。这些是ReactNative的基础。你有没有其他模块可以将规则添加到proguard配置中? – sfratini

相关问题