質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

1回答

762閲覧

ProGuardを有効にするとコンパイルエラーが発生する

IYEMON018

総合スコア202

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

1クリップ

投稿2017/09/08 07:52

編集2017/09/11 04:07

###前提・実現したいこと
Androidアプリを開発しています。
2つに分離したモジュールの内、ひとつのモジュールをProGuardで難読化したのですが、ProGuardを有効にするとコンパイルエラーが発生します。
このエラーが発生する原因と解消方法を教えてください。
Androidアプリの開発初心者ですので用語の使い方など間違っている箇所があると思います。
不明点はご指摘いただけると助かります。

###発生している問題・エラーメッセージ

Error:(16, 18) エラー: シンボルを見つけられません シンボル: クラス <クラス名> 場所: クラス MainActivity

###該当のソースコード

プロジェクトは以下の様に"アプリ"と"モジュール"にプロジェクトを分離しています。
アプリはモジュールを参照している状態です。

  • アプリ
  • モジュール

上記のエラーはアプリのMainActicityでモジュールのクラスを呼び出している部分で発生しています。

build.grable は以下の様に定義しています。

apply plugin: 'com.android.library' android { compileSdkVersion 26 buildToolsVersion "26.0.1" defaultConfig { minSdkVersion 19 targetSdkVersion 26 versionCode 1 versionName "1.0" } buildTypes { release { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { compile fileTree(include: ['*.jar'], dir: 'libs') androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' }) compile 'com.android.support:appcompat-v7:26.+' testCompile 'junit:junit:4.12' }

アプリ層とモジュール層のコードは以下の様になっています。
(実際のクラス名・パッケージ名とは異なります。)

  • モジュール層(呼び出し元)

java

1package com.example.module; 2 3public class ModuleSample { 4 5}
  • アプリ層(呼び出し側)

java

1package com.example.app; 2 3import android.support.v7.app.AppCompatActivity; 4import android.os.Bundle; 5 6// ここでコンパイルエラーが発生する。 7import com.example.module; 8 9public class MainActivity extends AppCompatActivity { 10 11 @Override 12 protected void onCreate(Bundle savedInstanceState) { 13 super.onCreate(savedInstanceState); 14 setContentView(R.layout.activity_main); 15 16 // ここでコンパイルエラーが発生する。 17 ModuleSample sample = new ModuleSample(); 18 } 19}

###試したこと
ProGuardを無効化するとコンパイルできるようになりました。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hiramekun

2017/09/08 14:03 編集

ご存知かもしれませんがproguardを使用するときには、リフレクションなどで動的にクラスやメソッドにアクセスしている場所でerrorが発生します。該当のActivityでリフレクションなど使っていないでしょうか? 呼び出し方のコードなどありましたら提示していただけると助かるかと思います!
IYEMON018

2017/09/11 04:09

遅くなりましたが追記しました。参考になるかどうかわかりませんがコードを追加しています。特にリフレクションなどは使用していなく、ただ単純に呼び出しているだけなのですが…。
guest

回答1

0

私はまだ未熟でライブラリ作成などをしていないのですが、こちらの記事などを見てみました。
モジュール側のpublicクラスは全てkeepする必要があるみたいです。
(他には "android library proguard rules"などでも調べてみましたが同様のことが書いてありました。

確かに、モジュール側でpublicかつどこからも参照されていないものは、モジュール側のproguard-rulesによって削除されると理解しましたが、これでよろしいでしょうか?

投稿2017/09/11 14:18

hiramekun

総合スコア428

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

IYEMON018

2017/09/12 06:22

回答ありがとうございます。 ご回答内容の通り、public クラスを全てKeepするようにしましたが解消されませんでした。 また、このkeepを使用すると難読化、最適化の対象から外れるので私の求めているものとは少し違っています。 ただ、設定によって難読化内容を制御するのは方向性としてはあっているように思うのでもう少し突っ込んで調べてみたいと思います。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問