标题中的问题.这里提出了一个类似的问题,唯一的解决方法是将项目发布到本地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无法识别图书馆项目结构.
我混淆了我的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) 我现在面临一个非常奇怪的问题......
我有一个带有两个模块的Gradle应用程序,一个主模块和一个库模块.
这是第一个问题:即使minifyEnabled在库中为false,它也会被混淆.它完全没有效果,似乎取决于主模块的设置.我现在使用proguard一段时间了,我从来没有经历过这样的行为.
此外,库的proguard-rules.pro似乎完全被忽略了.我在那里声明的并不重要,它没有被使用,结果总是相同的(总是反编译为查看结果).它使用默认设置进行模糊处理.
我使用了一个无效的proguard文件名来查看该文件是否被触摸,并且确实存在错误名称的错误,并且它还抱怨了proguard文件中的语法错误...
我不知道它是否与Android Studio的更新有关,因为它还建议我使用"minifyEnabled"而不是"runProguard".
如何管理proguard以使用库的proguard-rules.pro?
编辑:
我做了一个示例项目来澄清我的问题

我的库的proguard配置

我的图书馆的gradle:

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

如您所见,proguard规则在主模块上运行良好.它做了应有的事情.但它总是完全混淆我的图书馆...
它还完全删除了图书馆的活动,这根本不应该发生
我有gradle proguard的问题...我有以下模块:
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) 我正在使用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 - 结果相同
我的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)