相关疑难解决方法(0)

如何跨多个项目共享单个库源

标题中的问题.这里提出一个类似的问题,唯一的解决方法是将项目发布到本地Maven存储库.

Android Studio 0.5中是否修复了此问题(如某些人所声称的那样).+?在其发行说明中,有一条声明说"支持模块内容根目录之外的源文件夹".这是否意味着我们最终可以从项目文件夹外部导入库?

我尝试了File-> Import Project ..但它不起作用.

编辑2:查看最新解决方案的已接受答案(截至0.8.+)

编辑:

我的项目目录结构只有一个模块main,如下所示

MyApp
    main
        build.gradle
        src
    build.gradle
    settings.gradle
Run Code Online (Sandbox Code Playgroud)

库项目目录只有一个名为like的模块lib(它们都是在创建新库项目时自动生成的)

MyLibrary
    lib
        build.gradle
        src
    build.gradle
    settings.gradle
Run Code Online (Sandbox Code Playgroud)

以下行添加到MyApp/settings.gradle:

include ':main', '..:MyLibrary'
Run Code Online (Sandbox Code Playgroud)

以下内容添加到MyApp/main/build.gradle:

dependencies {
    compile project(':..:MyLibrary')
}
Run Code Online (Sandbox Code Playgroud)

结果是以下错误:

FAILURE: Build failed with an exception.

* What went wrong:
A problem occurred configuring project ':main'.
> Configuration with name 'default' not found.
Run Code Online (Sandbox Code Playgroud)

作为旁注,库项目MyLibrary本身可以编译而不会出错.问题似乎是settings.gradle无法识别图书馆项目结构.

android android-studio

59
推荐指数
2
解决办法
2万
查看次数

Android - 如何检查Proguard混淆有效?

我混淆了我的apk,但文件大小只从12MB减少到10.5MB.

它只是一个相对较小的减少的原因可能是因为我的应用程序使用了几个大型库,但有没有办法可以检查已经执行的混淆程度?

以防万一,这是我的proguard-project.txt文件......

# To enable ProGuard in your project, edit project.properties
# to define the proguard.config property as described in that file.
#
# Add project specific ProGuard rules here.
# By default, the flags in this file are appended to flags specified
# in ${sdk.dir}/tools/proguard/proguard-android.txt
# You can edit the include path and order by changing the ProGuard
# include property in project.properties.
#
# For more details, see
#   http://developer.android.com/guide/developing/tools/proguard.html

# Add any project specific keep options …
Run Code Online (Sandbox Code Playgroud)

obfuscation android proguard

32
推荐指数
3
解决办法
2万
查看次数

Proguard忽略了库的配置文件

我现在面临一个非常奇怪的问题......

我有一个带有两个模块的Gradle应用程序,一个主模块和一个库模块.

  • 在这两个模块中,我已经声明了一个正确的proguard-rules.pro文件路径
  • 在两个.gradle文件中,我有minifyEnabled为true

这是第一个问题:即使minifyEnabled在库中为false,它也会被混淆.它完全没有效果,似乎取决于主模块的设置.我现在使用proguard一段时间了,我从来没有经历过这样的行为.

此外,库的proguard-rules.pro似乎完全被忽略了.我在那里声明的并不重要,它没有被使用,结果总是相同的(总是反编译为查看结果).它使用默认设置进行模糊处理.

我使用了一个无效的proguard文件名来查看该文件是否被触摸,并且确实存在错误名称的错误,并且它还抱怨了proguard文件中的语法错误...

我不知道它是否与Android Studio的更新有关,因为它还建议我使用"minifyEnabled"而不是"runProguard".

如何管理proguard以使用库的proguard-rules.pro?

编辑:

我做了一个示例项目来澄清我的问题

在此输入图像描述

我的库的proguard配置

在此输入图像描述

我的图书馆的gradle:

在此输入图像描述

最后我得到的结果.我在proguard配置中排除/包含的内容并不重要

在此输入图像描述

如您所见,proguard规则在主模块上运行良好.它做了应有的事情.但它总是完全混淆我的图书馆...

它还完全删除了图书馆的活动,这根本不应该发生

android module proguard android-library android-studio

29
推荐指数
3
解决办法
2万
查看次数

使用android studio混淆多个模块

我有gradle proguard的问题...我有以下模块:

  • 应用:主应用模块.有依赖ModuleA和ModuleC
  • ModuleA:库模块.有依赖ModuleB和jar dependecies.
  • ModuleB:库模块
  • ModuleC:库模块
  • 穿:穿app模块.

build.gradle文件: - App:

buildTypes {
       release {
           minifyEnabled true
           proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
       }
 }
dependencies {
   compile fileTree(dir: 'libs', include: ['*.jar'])
   compile project(':ModuleA')
   compile project(':ModuleC')
   wearApp project(':Wear')
}
Run Code Online (Sandbox Code Playgroud)

ModuleA:

buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}
dependencies {
  compile fileTree(dir: 'libs', include: ['*.jar'])
  compile project(':ModuleB')
}
Run Code Online (Sandbox Code Playgroud)

ModuleB:

buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}
Run Code Online (Sandbox Code Playgroud)

ModuleC:与ModuleB相同.

穿:

buildTypes {
    release {
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), …
Run Code Online (Sandbox Code Playgroud)

obfuscation android proguard gradle android-studio

12
推荐指数
1
解决办法
2327
查看次数

proguard-rules.pro文件中的FileNotFoundException

我正在使用Android Studio v.1.0我的构建文件:

  buildTypes {

    debug {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

    }

    release {
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}
Run Code Online (Sandbox Code Playgroud)

但是当我尝试发布版本时,我收到一个错误:错误:任务':app:proguardRelease'的执行失败.

java.io.FileNotFoundException:F:....\app\proguard-rules.pro(找不到文件)

我想,proguard-android.txt是Android SDK的一部分,对吗?

为什么Android Studio找不到它?

我也试过proguard-android.pro - 结果相同

java android proguard

9
推荐指数
2
解决办法
2万
查看次数

如何在android gradle中免除库模块和pro-guard

我的Android应用程序的发布版本崩溃,但有以下异常

java.lang.NoSuchMethodError: no static or non-static method "Lcom/mm/android/dhproxy/client/DHProxyClient;.InitWithName(Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)I"

在调试版本中找不到此错误,因此我猜测是因为proguard.

上面提到的类位于其中一个也使用JNI库的模块中.我的应用程序模块文件的proguard规则如下

-keepattributes InnerClasses
-dontoptimize
-keep class com.mm.android.dhproxy.client.DHProxyClient
-keepclasseswithmembernames class * {
    native <methods>;
}
-keep class mypackage.MyCallbackClass {
    void myCallbackMethod(java.lang.String);
}
-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}

-printmapping build/outputs/mapping/release/mapping.txt
Run Code Online (Sandbox Code Playgroud)

相关模块的build.gradle文件如下所示

apply plugin:'com.android.library'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.3"
    compileOptions.encoding = 'ISO-8859-1'

    defaultConfig {

        minSdkVersion 14
        targetSdkVersion 23
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        }
    }
} …
Run Code Online (Sandbox Code Playgroud)

java android android-gradle-plugin android-proguard

5
推荐指数
2
解决办法
3326
查看次数