如何在单个android应用程序中正确导入多个统一模块,避免android studio中不同统一模块之间的名称冲突?

时间:2017-04-05 06:03:31

标签: android unity3d android-gradle

我已经导入了两个统一模块。三角模块和立方体模块。

 public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(MainActivity.this, com.labinapp.triangle.UnityPlayerActivity.class);
            startActivity(intent);
        }
    });
    findViewById(R.id.button2).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(MainActivity.this, com.labinapp.cube.UnityPlayerActivity.class);
            startActivity(intent);
        }
    });
}}

这是我的成绩档案配置

apply plugin: 'com.android.application'

android {
    compileSdkVersion 25
    buildToolsVersion "25.0.2"
    defaultConfig {
        applicationId "com.labinapp.demoCode"
        minSdkVersion 15
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
        multiDexEnabled = true



    }

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

    }
    packagingOptions {
        merge 'lib/armeabi-v7a/libmain.so'
        merge 'lib/x86/libmain.so'
        merge 'lib/armeabi-v7a/libunity.so'
        merge 'lib/x86/libunity.so'
        merge 'lib/armeabi-v7a/libmono.so'
        merge 'lib/x86/libmono.so'
    }


}


dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')

    compile 'com.android.support:appcompat-v7:25.3.1'

    compile project(':CubeModule')
    compile project(':TriangleModule')
}

我遇到了一些名称冲突,我使用merge

解决了这个问题
 packagingOptions {
        merge 'lib/armeabi-v7a/libmain.so'
        merge 'lib/x86/libmain.so'
        merge 'lib/armeabi-v7a/libunity.so'
        merge 'lib/x86/libunity.so'
        merge 'lib/armeabi-v7a/libmono.so'
        merge 'lib/x86/libmono.so'
    }

我的问题与任何按钮无关我只点击一个统一项目打开 这取决于我放置依赖的顺序

  

案例1:

   compile project(':CubeModule')
   compile project(':TriangleModule')
   -------------------------------------------------
   Output: CubeModule will be called by default 
  

案例2:

  compile project(':TriangleModule')
  compile project(':CubeModule')
  ---------------------------------------------------
  Output: TriangleModule will be called by default 

我认为合并不能正常工作是否有任何其他方法或任何解决方法来解决此问题任何建议都会有所帮助。

2 个答案:

答案 0 :(得分:0)

我尝试过多次但失败了。这似乎不可能。它就像试图将两个文件保存在同一个文件夹中一样。但问题是该文件具有相同的名称。你不能使用两个模块,因为这两个模块都带有几个常见文件,必须放在公共文件夹中。因此,基于你的依赖顺序,android构建系统选择其中一个并将其打包在apk中。

答案 1 :(得分:0)

如果仔细观察,您将通过两个按钮调用UnityPlayerActivity.class-这是Unity内置代码中为Activity赋予的默认名称。解决此问题的方法是在Unity导出的Android项目中重命名java类。

  

在构建CubeModule和TriangleModule之前,请检查类   命名并将其重构为另一个名称。别忘了重命名   在Android清单中也是如此。

现在,将其引入应用程序代码时,将引用这些类名并正确启动特定的unity模块。