මේ පිළිතුර අතර වෙනස පිළිබිඹු කරන implementation
, api
සහ compile
ව්යාපෘතියක් මත.
ග්රේඩ්ල් මොඩියුල තුනක් සහිත ව්යාපෘතියක් මා සතුව ඇතැයි කියමු:
- යෙදුම (Android යෙදුමක්)
- myandroidlibrary (ඇන්ඩ්රොයිඩ් පුස්තකාලයක්)
- myjavalibrary (ජාවා පුස්තකාලයක්)
app
ඇත myandroidlibrary
පරායත්තයන් ලෙස. myandroidlibrary
ඇත myjavalibrary
පරායත්තයන් ලෙස.
myjavalibrary
සතුව MySecret
පන්ති
public class MySecret {
public static String getSecret() {
return "Money";
}
}
myandroidlibrary
ඇත MyAndroidComponent
වටිනාකමක් හසුරුවනු පන්තියේ MySecret
පන්ති.
public class MyAndroidComponent {
private static String component = MySecret.getSecret();
public static String getComponent() {
return "My component: " + component;
}
}
අවසාන වශයෙන්, app
වටිනාකම ගැන පමණක් උනන්දු වේmyandroidlibrary
TextView tvHelloWorld = findViewById(R.id.tv_hello_world);
tvHelloWorld.setText(MyAndroidComponent.getComponent());
දැන් අපි පරායත්තතා ගැන කතා කරමු ...
app
පරිභෝජනය කිරීමට අවශ්යයි :myandroidlibrary
, එබැවින් app
build.gradle භාවිතයේදී implementation
.
( සටහන : ඔබට api / compile ද භාවිතා කළ හැකිය. නමුත් එම සිතුවිල්ල මොහොතකට තබා ගන්න.)
dependencies {
implementation project(':myandroidlibrary')
}
myandroidlibrary
Build.gradle පෙනුම කුමක් විය යුතු යැයි ඔබ සිතන්නේද ? අප භාවිතා කළ යුතු විෂය පථය කුමක්ද?
අපට විකල්ප තුනක් ඇත:
dependencies {
// Option #1
implementation project(':myjavalibrary')
// Option #2
compile project(':myjavalibrary')
// Option #3
api project(':myjavalibrary')
}
ඔවුන් අතර ඇති වෙනස කුමක්ද සහ මා භාවිතා කළ යුත්තේ කුමක්ද?
සම්පාදනය හෝ Api (විකල්පය # 2 හෝ # 3)
ඔබ භාවිතා කරන්නේ නම් compile
හෝ api
. අපගේ ඇන්ඩ්රොයිඩ් යෙදුමට දැන් myandroidcomponent
පරායත්තතාවයට ප්රවේශ විය හැකිය , එය MySecret
පන්තියකි.
TextView textView = findViewById(R.id.text_view);
textView.setText(MyAndroidComponent.getComponent());
// You can access MySecret
textView.setText(MySecret.getSecret());
ක්රියාත්මක කිරීම (විකල්පය # 1)
ඔබ implementation
වින්යාසය භාවිතා කරන්නේ නම් , MySecret
නිරාවරණය නොවේ.
TextView textView = findViewById(R.id.text_view);
textView.setText(MyAndroidComponent.getComponent());
// You can NOT access MySecret
textView.setText(MySecret.getSecret()); // Won't even compile
ඉතින්, ඔබ තෝරාගත යුත්තේ කුමන වින්යාසයද? එය සැබවින්ම ඔබගේ අවශ්යතාවය මත රඳා පවතී.
ඔබ නම් පරායත්තයන් හෙළිදරව් කිරීමට අවශ්ය භාවිතය api
හෝ compile
.
පරායත්තතා හෙළි කිරීමට ඔබට අවශ්ය නැතිනම් (ඔබේ අභ්යන්තර මොඩියුලය සැඟවීම) භාවිතා කරන්න implementation
.
සටහන:
මෙය ශ්රේණියේ වින්යාසයන්ගේ සාරාංශයක් පමණි, වගුව 49.1 බලන්න. ජාවා පුස්තකාල ප්ලගිනය - වඩාත් සවිස්තරාත්මක පැහැදිලි කිරීම සඳහා පරායත්තතා ප්රකාශ කිරීමට භාවිතා කරන වින්යාසයන් .
මෙම පිළිතුර සඳහා නියැදි ව්යාපෘතිය https://github.com/aldoKelvianto/ImplementationVsCompile වෙතින් ලබා ගත හැකිය